Javascript函数范围混乱

时间:2018-06-17 20:33:01

标签: javascript function scope

有人可以向我解释一下:

var test = 5;

// prints 5;
function printMe1(){
    console.log(test);
}

// prints "undefined"
function printMe2(){
    console.log(test);
    var test = 10;
}

这是因为printMe2创建了一个" test"的局部变量吗?如果是这样,为什么log语句引用局部变量,如果它在它之后声明?

而且,如果JS是一种解释型语言,那么代码是否应该逐行解释?在这种情况下,日志语句不应该能够知道本地"测试"变量稍后声明?

2 个答案:

答案 0 :(得分:1)

javascript“提升”中存在一个概念,因此在提升变量和函数声明时,它们会在代码执行之前移至其作用域的顶部。只记住声明,不记住定义。这就是为什么在您的代码中var测试显示未定义的原因,因为在定义变量之前您正在使用此变量。

var test;
function printme2(){
console.log(test)
test=10
}
printme2()

答案 1 :(得分:0)

我刚做了一些谷歌搜索并找到答案。

这是因为Javascript将“变量”声明“提升”到范围的顶部。因此,本地“test”变量被声明在函数范围的顶部,因此打印它的原因是“undefined”。

(如果有任何错误请告诉我:))