这个问题在这里已经有了答案:
Understanding JavaScript function scoping
(4 个回答)
去年关闭。
在这段代码中,我希望它打印 I love Java
.但是var
是功能范围的。出于这个原因,它被提升到顶部并看到它已定义。所以我希望答案是 JavaScript
但机智输出Java
, 为什么?
var lang1 = 'Java'
var lang2 = 'JavaScript'
function getLanguage(){
if(!lang2){
var lang2 = lang1
}
return lang2
}
console.log(`I love ${getLanguage()}`)
最佳答案
因为 Javascript variable hoisting , 编码:
function getLanguage(){
if(!lang2){
var lang2 = lang1
}
return lang2
}
将被渲染/重写(如果你愿意的话):function getLanguage(){
var lang2; // undefined local var
if(!lang2){ // this expression will evaluate to true because !undefined = true
lang2 = lang1 // set the local var to the global lang1
}
return lang2 // return the local var
}
关于javascript - 为什么我的函数作用域变量没有按预期设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67296280/