我知道JavaScript中的每个函数都是一流的对象,并且具有内部属性[[scope]],该属性承载该函数的自由变量的绑定记录。但是,有两种特殊情况。
由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引用一个作为内部函数创建的空函数对象。它没有自由变量。在这种情况下,我们可以说形成了闭合吗?
阿晨1998
呼啦一阵风
相关分类