只是想了解闭包与非闭包函数。因此,当我运行以下命令时...
function outer()
{
var i = 0;
i++;
console.log( i );
}
outer(); // prints 1
outer(); // prints 1
outer(); // prints 1
但是当我运行以下命令时...
function outer()
{
var i = 0;
function inner()
{
i++;
console.log( i );
}
return inner;
}
var closure = outer();
closure(); // prints 1
closure(); // prints 2
closure(); // prints 3
很好。我了解以上内容。但是,当我尝试运行以下命令时...
function outer()
{
var i = 0;
i++;
console.log( i );
}
var closure = outer();
closure(); // prints 1
closure(); // prints 2
closure(); // prints 3
我收到一个错误,因为与闭包不同,此处未返回该函数。因此,我将其修改为以下内容...
function outer()
{
var i = 0;
i++;
console.log( i );
return this;
}
var closure = outer();
closure(); // prints 1
closure(); // prints 2
closure(); // prints 3
我仍然遇到错误,只是发现在这种情况下,this
没有引用父函数...而是引用了全局对象。难怪它给了一个错误。但是,我可以用this
代替outer()
函数吗?
第二,即使那样...我是否可以模拟关闭?我认为不是...但是为什么?
答案 0 :(得分:0)
此代码var closure = outer()
将执行外部函数,并将结果分配给closure
。但是由于outer
closure()
没有返回任何内容,因此无法正常运行。在这种情况下,您可以尝试从外部移除()
。
在这种情况下,返回this
等同于不返回任何内容。在此功能内,this
会反转为窗口对象,因此closure()
会变成this()
function outer() {
var i = 0;
i++;
console.log(i);
return this;
}
var closure = outer;
console.log(closure());
closure();
closure();
I get an error because unlike in the closure,
the function is not being returned here. So,
I modified it to the following ...