Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 执行上下文混淆_Javascript_Scope - Fatal编程技术网

Javascript 执行上下文混淆

Javascript 执行上下文混淆,javascript,scope,Javascript,Scope,我知道JavaSript没有块级作用域,所以为什么JShint会抛出这个错误: 变量警告可能尚未初始化。 function x(){ if(y<allQuestions.length && document.getElementById('warning')<1) { var warning = document.createElement('p'); warning.id = 'warning'; warning

我知道JavaSript没有块级作用域,所以为什么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!'));

    }
}
函数x(){

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

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

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

if(耶..我明白了!我试图再次声明一个同名的变量,但JShint抛出了“重复声明”错误。与变量主题无关,您可以测试DOM中是否有元素,但这是一种非常奇怪的方法。
getElementById()当找不到元素时,函数将返回
null
。一个更好的语句是document.getElementById('warning')!=null,对吗?是的,这是一种更典型的方法。
function x(){
    var warning;
    if (y<allQuestions.length && document.getElementById('warning')<1) {
      warning = document.createElement('p');
      // ...