我知道 JavaScript 中的每个函数都是一等对象,它有一个内部属性 [[scope]] ,它承载函数自由变量的绑定记录。但是,有两种特殊情况。
Function构造函数创建的函数也是闭包吗?Function 构造函数创建的函数对象是特殊的,因为它的 [[scope]] 可能不是指其外部函数的词法环境,而只是全局上下文。例如,
var a = 1; var fn = (function outer() { var a = 2; var inner = new Function('alert(a); '); return inner; })(); fn(); // will alert 1, not 2.
这是不直观的。这也叫闭包?
如果一个内部函数没有任何自由变量,我们可以说创建内部函数时就形成了一个闭包吗?例如,
// This is a useless case only for academic study var fn = (function outer() { var localVar1 = 1, localVar2 = 2; return function() {}; })();
在这种情况下, fn 指的是作为内部函数创建的空函数对象。它没有自由变量。在这种情况下,我们可以说形成了一个闭包吗?