javascript - 为什么我的函数作用域变量没有按预期设置?

标签 javascript

这个问题在这里已经有了答案:





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/

相关文章:

javascript - 上传excel文件并消费数据

html - Mozilla Firefox 表示 Referenceerror 事件未定义,没有解决方案

javascript - 如何使用 jQuery/Javascript 使表单验证出现箭头框错误消息

javascript - 使用 Tab 键进行页面导航时滚动到表单元素上的错误消息

javascript - 更改事件事件未触发

javascript - 在 Javascript 中创建和访问对象数组

javascript - 单击或悬停在 Bootstrap 标签输入标签上时如何获取(对象)值?

javascript - 未捕获的类型错误 : Cannot read property 'removeLayer' of undefined Vue and Leaflet

javascript - 使用 setState 更改对象数组中的多个值 -- ReactJS

javascript - JS : I am trying to understand event emitters vs event listeners