Javascript 为什么在函数内部我们可以覆盖;“未定义”;但是可以';JS中的窗口对象中的t…下面给出了一个示例

Javascript 为什么在函数内部我们可以覆盖;“未定义”;但是可以';JS中的窗口对象中的t…下面给出了一个示例,javascript,Javascript,我给出了两个不同的代码。一个在全局窗口对象内,另一个在foo函数内 这里是我的第一个代码: var未定义=2;//2. console.log(未定义==2);//它给我错误的印象 变量窗口=5;//5. console.log(窗口==5);//它给我错误的印象 var a; console.log(a);//它给了我未定义的全局范围不会让你搞乱任何事情。这基本上会导致各种不好的事情发生。这就是为什么你不能改变外面的事情 在函数内部,在一个独立的作用域中,它允许您使用其他名称声明变量。虽然这

我给出了两个不同的代码。一个在全局
窗口
对象内,另一个在
foo
函数内

这里是我的第一个代码:

var未定义=2;//2.
console.log(未定义==2);//它给我错误的印象
变量窗口=5;//5.
console.log(窗口==5);//它给我错误的印象
var a;

console.log(a);//它给了我未定义的
全局范围不会让你搞乱任何事情。这基本上会导致各种不好的事情发生。这就是为什么你不能改变外面的事情

在函数内部,在一个独立的作用域中,它允许您使用其他名称声明变量。虽然这是一个绝对可怕的做法,您应该不惜一切代价避免它,但它不会影响一个功能之外的任何东西

function foo() {
    var window = 5;
}

函数中的
窗口
与全局级别的
窗口
不同。函数中的
窗口
只是屏蔽了外部窗口,使其无法从
foo
窗口内部访问

未定义的
是预定义的(由JS引擎/浏览器)变量

您不能覆盖只读变量(如果变量已经存在,则在其存在的范围内使用
var
不会执行任何操作)

您可以在更窄的范围内声明一个新变量,该变量在更宽的范围内屏蔽一个同名变量。

在您的函数
foo()console.log(undefined==2)
中返回您提到的//true。但实际上它返回“false”。因为“undefined”是一个保留关键字。所以你不能用它作为变量。请参见图片:

最好在
foo()中使用其他变量名

第二个代码块返回,
false
true
undefined
我知道这不是一个好的做法,但我只是想知道在javascript的执行过程中实际发生了什么。注意:
undefined
通常作为参数传递给插件构造函数,以确保值被保留而不是重新定义。这真的不是一件事do@AliSomay在未定义之前,他忘记了
var
,当它在这里时,未定义实际上被覆盖,结果就是他写的Google变量shadowing.thnx buddy…我知道这是一种不好的做法。我只是不知道为什么会这样。