提问人:webbyweb 提问时间:6/18/2018 更新时间:5/21/2020 访问量:88
Javascript 函数范围混淆
Javascript Function Scope Confusion
问:
有人可以向我解释一下吗:
var test = 5;
// prints 5;
function printMe1(){
console.log(test);
}
// prints "undefined"
function printMe2(){
console.log(test);
var test = 10;
}
这是因为 printMe2 创建了一个局部变量 “test” 吗?如果是这样,为什么 log 语句引用局部变量,如果它是在它之后声明的?
而且,如果 JS 是一种解释型语言,那么代码不应该逐行解释吗?在哪种情况下,log 语句不应该知道稍后声明了本地“test”变量?
答:
0赞
webbyweb
6/18/2018
#1
我只是做了一些谷歌搜索并找到了答案。
这是因为 Javascript 将变量声明“提升”到作用域的顶部。因此,局部“test”变量被声明在函数作用域的顶部,因此打印它给出“undefined”的原因。
(如果有任何错误,请告诉我:))
评论
1赞
Dave Newton
6/18/2018
很高兴你在自己身上找到了答案——尽管下次可能会先试试;)
1赞
anuj agarwal
5/21/2020
#2
JavaScript 中有一个概念“提升”,因此在提升中,变量和函数声明在代码执行之前被移动到其作用域的顶部。只记住声明,不记住定义。这就是为什么在您的代码中 var test 显示 undefined,因为您在定义它之前使用了这个变量。
var test;
function printme2(){
console.log(test)
test=10
}
printme2()
评论
let
const
var