在 JavaScript 中,为什么这个全局变量在我的函数中未定义?

尼瓦斯

var x = 3;
function func(randomize) {
    if (randomize) {
        var x = Math.random();
        return x;
    }
    return x;
}
console.log(func(false));

从上面的代码可以看出,if statement never be truex值是undefined,我想了解变量声明在 javascript 中是如何工作的。任何参考资料也有帮助。
更新:
任何人都可以解释为什么变量被重新声明为 undefined 以及它与 javascript 中的提升有何关系

思南乌尔

因为func本质上是:

function func(randomize) {
    var x;
    if (randomize) {
        x = Math.random();
        return x;
    }
    return x;
}

JavaScript 中的变量具有函数作用域,而不是您在其他语言中可能熟悉的块作用域。这会导致您观察到提升行为:

确实发生的是,变量和函数声明在编译阶段被放入内存中,但完全保留在您在编码中键入的位置。

...

JavaScript 只提升声明,而不是初始化。强调我的

也就是说,即使内func声明xif块,在编译时它的声明移动到它的功能级别阴影 x在全球范围内。但是,只有当 的参数导致您观察到的行为时才会初始化它。functrue

另见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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

惊讶全局变量在JavaScript中具有未定义的值

在JavaScript函数中定义全局变量

为什么我的变量在带有array.forEach的嵌套函数中在Javascript中使用未定义

为什么我的JavaScript提升的局部变量返回未定义,而提升的全局变量返回空白?

为什么NaN是JavaScript中的全局变量?

返回函数中未定义的Javascript全局对象

JavaScript中的奇怪示例,为什么我不能通过函数的参数重新分配全局变量的值?

我的JavaScript函数中没有看到全局变量

为什么函数内的javascript全局变量显示错误?

为什么在JavaScript中未定义“ [] [[]]”

为什么我的变量在javascript中返回未定义?

在JavaScript中重新分配全局变量-有人可以向我解释为什么currentAcc保持未定义状态

在函数中对其进行更改后,Javascript全局变量保持“未定义”

为什么JavaScript中的函数不接受未定义的变量?

为什么我的javascript函数未将更改应用于我的全局变量?

在javascript函数中设置全局变量

全局变量在页面刷新JAVASCRIPT上未定义

JavaScript全局变量在函数内部变为未定义

为什么我在JavaScript中得到“未定义”

为什么即使声明了全局变量,Javascript代码也会显示“未定义”?

为什么我的警报在javascript中显示未定义

异步函数中的Javascript全局变量?

JavaScript结果中的全局变量始终未定义

为什么我的 javascript 抛出函数未定义错误?

为什么在 javascript 中执行导入时,有时会返回未定义的变量?

函数中的变量未定义/Javascript

Javascript 函数中未定义的 Angular 变量?

为什么这个变量在我全局定义的时候没有定义?(javascript,p5.js)

为什么我的变量在 javascript 中未定义?