【发布时间】:2017-08-08 18:51:24
【问题描述】:
由于闭包是绑定到其词法环境的函数,我想知道为什么notAClosure 构造不是闭包:
let a = { b: 42 };
let notAClosure = ( param ) => { param.b++ };
let aClosure = () => { a.b++ };
notAClosure(a);
当notAClosure 被调用时,我们通过引用将对象a 传递给它。这意味着现在在闭包内部我们可以访问外部范围 = 词法环境。
我对函数的命名是否正确? aClosure 是真正的闭包吗? notAClosure 真的不是闭包吗?如果是正确的 - 那为什么?
【问题讨论】:
-
一个函数只有在访问定义在外部范围内的变量时才会形成一个闭包。
param是一个局部变量,所以notAClosure不是一个闭包。所有函数都可以访问全局变量,因此如果a是全局变量,则aClosure并不是真正的闭包。 -
为什么这对你很重要?是否存在您的代码存在差异的真实场景?这似乎纯粹是哲学上的。
标签: javascript