1

我阅读了很多关于 javascript 匿名自执行函数的帖子并询问/回答,但恐怕我仍然没有抓住重点。为什么这段代码显示 myvar 值?构造 (function(){ code })() 不应该让所有变量从外部不可见吗?

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

alert(myvar);

那么上面的代码和

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

alert(myvar);

?

4

3 回答 3

3

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

myvar如果您想将其保密,则应使用以下范围var

(function(){
    var myvar = 5;
})();
于 2013-01-05T17:09:42.593 回答
2

您未能使用 声明“myvar” var

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

(function(){
    "use strict";
    myvar = 5;
})();
于 2013-01-05T17:10:02.110 回答
2

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

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

如果您需要在函数范围内显式地锁定变量,请创建一个匿名函数,然后立即执行它,其中的所有变量都将作用于该函数

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


alert(typeof(myVar));

结果“未定义”

于 2013-01-05T17:16:14.227 回答