为什么我的函数作用域变量没有像我期望的那样设置?
在这段代码中,我希望它打印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变量提升,代码:
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
}