分配给窗口属性的函数是否仍然可以访问局部变量?

Does a function assigned to a window property still have access to local variables?

本文关键字:访问 局部变量 是否 窗口 属性 函数 分配      更新时间:2023-09-26

问题:当在窗口上声明函数时,该函数是否仍然可以访问局部变量?

(function(){
    var foo = "poo"; //local var
    window.bar = function(){
        alert(foo);
    }
})();
bar();

我在jsfiddle中测试了这个,它可以工作,但是我的IDE建议它不应该。想法吗?最佳实践评论?

http://jsfiddle.net/nRT6B/1/

作为参考,我在全局声明函数,因为Flash回退- Flash不能引用我的自关闭函数

您的函数未在window中定义。它在匿名包装器函数中定义,然后分配给window中的属性。

函数可以访问定义它们的同一作用域内的任何变量,与它们被赋值给哪个对象或赋值多少次无关。一个函数可以被分配给数百个不同的对象,但这不会改变它的工作方式,除非你把它分配给一个对象的原型,然后通过对象的实例调用它。但这只是因为调用它们的特殊方式,使它们的上下文(this对象)成为当前对象调用者。事实上,这个

var a = new Array();
a.push(1);

等价于

var a = new Array();
Array.prototype.push.call(a, 1);