问题:在窗口上声明一个函数时,该函数是否仍然可以访问本地变量?
(function(){
var foo = "poo"; //local var
window.bar = function(){
alert(foo);
}
})();
bar();
我在jsfiddle中对此进行了测试并且它可以正常工作,但是我的IDE建议不应该这样做。思考?最佳做法评论?
作为参考,我因为Flash回退而全局声明该功能 - Flash无法引用我的自动关闭功能
答案 0 :(得分:1)
您的功能未在window
中定义。它在匿名包装函数中定义,然后分配给窗口中的属性。
函数可以访问与定义它们的范围相同的任何变量,它们分配给哪个对象或多少次都无关紧要。函数可以分配给数百个不同的对象,但这并不会改变其工作方式,除非您将其分配给对象的原型,然后通过对象的实例调用它。但这仅仅是因为它们被调用的特殊方式,使它们的上下文(this
对象)成为当前的对象调用者。实际上,这个
var a = new Array();
a.push(1);
相当于
var a = new Array();
Array.prototype.push.call(a, 1);