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

时间:2014-03-13 21:14:07

标签: javascript flash window

问题:在窗口上声明一个函数时,该函数是否仍然可以访问本地变量?

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

bar();

我在jsfiddle中对此进行了测试并且它可以正常工作,但是我的IDE建议不应该这样做。思考?最佳做法评论?

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

作为参考,我因为Flash回退而全局声明该功能 - Flash无法引用我的自动关闭功能

1 个答案:

答案 0 :(得分:1)

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

函数可以访问与定义它们的范围相同的任何变量,它们分配给哪个对象或多少次都无关紧要。函数可以分配给数百个不同的对象,但这并不会改变其工作方式,除非您将其分配给对象的原型,然后通过对象的实例调用它。但这仅仅是因为它们被调用的特殊方式,使它们的上下文(this对象)成为当前的对象调用者。实际上,这个

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

相当于

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