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

变量warning可能尚未初始化。

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 statemenet,它将识别变量,并且代码可以正常工作。

最佳答案

在这种情况下,JSHint完全正确。考虑一下您的代码:warning在哪里声明和初始化?如果代码将其放在else子句中,那么warning将如何具有值?

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

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/

10-11 13:46