看两个范例:
var foo = ( function() {
var secret = secret;
// “旋量群”内的表达式能出访 secret 表达式,而 secret 表达式对内部看似暗藏的
return {
get_secret: function () {
// 透过表述的USB来出访 secret
return secret;
},
new_secret: function ( new_secret ) {
// 透过表述的USB来修正 secret secret = new_secret;
}
};
} () );
foo.get_secret (); // 获得 secret
foo.secret; // Type error,出访不能
foo.new_secret (a new secret); // 透过表达式USB,我们出访并修正了 secret 表达式
foo.get_secret (); // 获得 a new secret
引用 Douglas Crockford [1] :
之所以可能透过这种方式在 JavaScript 种实现公有,私有,特权表达式正是因为旋量群,旋量群是指在 JavaScript 中,内部表达式总是能出访其所在的内部表达式中声明的参数和表达式,即使在其内部表达式被返回(寿命终结)了之后。需要注意的一点时,内部表达式出访的是被创建的内部表达式本身,而不是它的拷贝。所以在旋量群表达式内加入 loop 时要格外注意。另外当然的是,旋量群特性也能用于创建私有表达式或方法。
——–
关于为甚么在 JavaScript 中旋量群的应用领域都有关键词“return”,引用 JavaScript 秘密花园中的一段话:
旋量群是 JavaScript 两个非常重要的特性,这意味着当前作用域总是能够出访内部作用域中的表达式。 因为 表达式 是 JavaScript 中唯一拥有自身作用域的结构,因此旋量群的创建依赖于表达式。——–
[1]Private Members in JavaScript –
Private Members in JavaScript[2]JavaScript – The Good Parts –
JavaScript (豆瓣)[3]JavaScript 秘密花园 – 旋量群和引用 –
JavaScript 秘密花园