有人可以向我解释一下:
var test = 5;
// prints 5;
function printMe1(){
console.log(test);
}
// prints "undefined"
function printMe2(){
console.log(test);
var test = 10;
}
这是因为printMe2创建了一个" test"的局部变量吗?如果是这样,为什么log语句引用局部变量,如果它在它之后声明?
而且,如果JS是一种解释型语言,那么代码是否应该逐行解释?在这种情况下,日志语句不应该能够知道本地"测试"变量稍后声明?
答案 0 :(得分:1)
javascript“提升”中存在一个概念,因此在提升变量和函数声明时,它们会在代码执行之前移至其作用域的顶部。只记住声明,不记住定义。这就是为什么在您的代码中var测试显示未定义的原因,因为在定义变量之前您正在使用此变量。
var test;
function printme2(){
console.log(test)
test=10
}
printme2()
答案 1 :(得分:0)
我刚做了一些谷歌搜索并找到答案。
这是因为Javascript将“变量”声明“提升”到范围的顶部。因此,本地“test”变量被声明在函数范围的顶部,因此打印它的原因是“undefined”。
(如果有任何错误请告诉我:))