我见过JavaScript是这样写的(它是在一个演示中,我手头没有实际的代码,但它暗示这是正常的):
(function() {
var a = 1;
this.sayA = function() {
alert(a);
}
}).call(this);
sayA();
我认为它是一个匿名函数,所以变量a
不是全局可用的。
.call(this)
的意义何在?因为这个函数不是嵌套的,所以this
只是一个窗口。这和只在最后写()
有什么不同?
发布于 2011-11-07 19:45:43
试试这个:
function Foo() {
(function () {
console.log(this);
// > Foo
}).call(this);
(function () {
console.log(this);
// > undefined in strict mode, or Window in non strict mode
})();
}
var bar = new Foo;
因此,如果您出于任何原因使用它,它是一种使IIFE表现得好像它是Foo
的成员函数一样的方法,特别是在创建用户定义的对象类型的实例时。
发布于 2012-08-20 11:11:28
我对此很好奇,因为我刚刚看过John Resig关于this video的演讲。Yoshi有一个很好的答案,但我必须在控制台日志中测试一下才能理解,我认为对他的答案的修改可能会帮助一些像我这样一开始遇到麻烦的人:
function Foo() {
this.foo = true;
(function () {
console.log("Foo = " + this.foo);
// Outputs undefined
}());
(function () {
console.log("Foo = " + this.foo);
// Outputs true
}).call(this);
(function () {
console.log(this);
// Outputs undefined in strict mode, or Window in non strict mode
// Anonymous functions usually default to the global scope
})();
}
var bar = new Foo;
对我来说,并排查看第一个和第二个更有意义,这表明.call(这)本质上提供了将当前上下文传递给匿名函数的能力。
谢谢你的问题,也感谢Yoshi清晰的回答!
发布于 2011-11-07 19:36:17
传递给函数的this
设置执行的上下文,因此在匿名函数中,this
引用window
。
然后就可以编写this.alert('');
了。
https://stackoverflow.com/questions/8035822
复制相似问题