javascript自我执行函数和范围

时间:2013-01-05 17:08:21

标签: javascript

我阅读了很多帖子并询问/回答有关javascript匿名自动执行功能,但我担心我仍然忽略了这一点。为什么这段代码显示myvar值?构造(function(){ code })()是否应该保持所有变量不在外面?

(function(){
    myvar = 5;
})();

alert(myvar);

所以上面的代码和

之间有什么不同
function myfunction(){
    myvar = 5;
};
myfunction();

alert(myvar);

3 个答案:

答案 0 :(得分:3)

myvar在窗口范围内定义,因此所有人都可以访问。

如果您希望将myvar保密,则应var范围:

(function(){
    var myvar = 5;
})();

答案 1 :(得分:2)

您未能使用var声明“myvar”。

看看当你改变它时会发生什么:

(function(){
    "use strict";
    myvar = 5;
})();

答案 2 :(得分:2)

变量的作用域是javascript中的函数级别。这意味着如果在循环或if语句中声明变量,它将可用于整个函数。

在你的情况下,你的myVar可用于整个窗口,正如有人指出的那样。

如果需要在函数范围内明确地保存变量,请创建一个匿名函数,然后立即执行它,内部的所有变量都将作用于函数

(function(){
    var myvar = 5;
})();


alert(typeof(myVar));

结果“未定义”