JavaScript 里的闭包是什么?应用场景有哪些?

2023-05-28 0 1,121

看两个范例:

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 秘密花园

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务