var x = 3;
function func(randomize) {
if (randomize) {
var x = Math.random();
return x;
}
return x;
}
console.log(func(false));
从上面的代码可以看出,if statement never be true
但x
值是undefined
,我想了解变量声明在 javascript 中是如何工作的。任何参考资料也有帮助。
更新:
任何人都可以解释为什么变量被重新声明为 undefined 以及它与 javascript 中的提升有何关系
因为func
本质上是:
function func(randomize) {
var x;
if (randomize) {
x = Math.random();
return x;
}
return x;
}
JavaScript 中的变量具有函数作用域,而不是您在其他语言中可能熟悉的块作用域。这会导致您观察到的提升行为:
确实发生的是,变量和函数声明在编译阶段被放入内存中,但完全保留在您在编码中键入的位置。
...
JavaScript 只提升声明,而不是初始化。(强调我的)
也就是说,即使内func
声明x
的if
块,在编译时它的声明移动到它的功能级别阴影 x
在全球范围内。但是,只有当 的参数是导致您观察到的行为时才会初始化它。func
true
另见let
:
"use strict";
var x = 3;
function func(randomize) {
if (randomize) {
let x = Math.random();
return x;
}
return x;
}
console.log(func(false));
console.log(func(true));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句