gpt4 book ai didi

javascript - 执行上下文困惑

转载 作者:行者123 更新时间:2023-11-28 07:51:44 24 4
gpt4 key购买 nike

我知道 JavaSript 没有 block 级作用域,那么为什么 JShint 会抛出此错误:

变量警告可能尚未初始化。

function x(){
if(y<allQuestions.length && document.getElementById('warning')<1) {
var warning = document.createElement('p');
warning.id = 'warning';
warning.appendChild(document.createTextNode('Please check an answer!'));
wrapper.appendChild(warning);

setTimeout(function(){
if (document.getElementById('warning')) {
wrapper.removeChild(document.getElementById('warning'));
}
}, 2500);

}else{
//HERE is the problem
warning.appendChild(document.createTextNode('Your response is still worng!'));

}
}

没有 else 语句,它可以识别变量并且代码可以工作。

最佳答案

在这种情况下,JSHint 是完全正确的。想想你的代码:warning 在哪里声明和初始化?如果代码进入 else 子句,warning 将如何具有值?

var 声明和初始化移出 if block :

function x(){
var warning = document.createElement('p');
if (y<allQuestions.length && document.getElementById('warning')<1) {

请记住,变量声明被提升到函数的顶部,但变量初始化则不然。因此您的原始代码相当于:

function x(){
var warning;
if (y<allQuestions.length && document.getElementById('warning')<1) {
warning = document.createElement('p');
// ...

关于javascript - 执行上下文困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26716409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com