2

我在 .js 文件中定义了一个全局变量。:

如果我的函数有一个与全局变量同名的参数,则该函数无法初始化全局变量:

var myvar;

function init(myvar){
    myvar= myvar;
}

但是,如果我更改变量名称,使全局变量和参数具有不同的名称,则该函数可以初始化全局变量:

var myvar2;

function init(myvar){
    myvar2= myvar;
}

myvar2然后正确初始化)。

为什么会这样?javascript 不允许在不同范围内具有相同名称的两个变量,所以会发生变量阴影?

我认为 js 引擎能够以与 java 相同的方式区分方法范围和全局范围(尽管使用 this 关键字)

4

1 回答 1

6

那是对的; 全局变量被遮蔽。想想看。在本声明中:

myvar = myvar;

如果没有阴影,哪个myvar是全局的,哪个是本地的?

于 2013-01-28T18:29:44.113 回答