javascript - 如何用可变范围解释这个问题?

标签 javascript scope

为什么第二个函数输出一个空数组?

var global = ["abc"];

function test1() {
    var g = global || [];
    console.log(g);             //outputs: ["abc"]
}

function test2() {
    var global = global || [];
    console.log(global);        //outputs: []
}

最佳答案

虽然它看起来应该有效,因为赋值是从右到左进行的,但您需要考虑变量声明被提升

对于解释器来说,你的代码实际上是这样的:

function test2() {
    var global; // global is undefined

    global = global || []; // because undefined is falsey, the [] is assigned

    console.log(global); // displays the []
}

关于javascript - 如何用可变范围解释这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7796766/

相关文章:

Bash:子进程访问变量

javascript - 如何向此 javascript 函数添加转换

javascript - for (let i in string) {} 等价于 for (let i = 0; i < string.length; i++) {} 吗?

javascript - 如何使用 JavaScript 求出 1 到 N 之间所有数字的总和

php - 类声明的范围

Javascript 变量意外未定义

javascript - 无法将参数传递给循环

java - JAVA中静态成员的内存范围

javascript - javascript后台url中的括号

javascript - 让 CodeMirror 跟随一个 TextArea