Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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_Hoisting - Fatal编程技术网

Javascript吊装混乱

Javascript吊装混乱,javascript,hoisting,Javascript,Hoisting,我读了Kyle的我不知道JS,并且知道函数声明将在var之前先提升。所以在下面的代码中 <script> foo(); var a = true; if ( a ) { function foo() { console.log( "a" ); } }else { function foo() { console.log( "b" ); } } foo(); </script> fo

我读了Kyle的
我不知道JS
,并且知道函数声明将在
var
之前先提升
。所以在下面的代码中

<script>
   foo();
   var a = true;
   if ( a  ) {
          function foo() { console.log( "a"  );  }
   }else {
          function foo() { console.log( "b"  );  }
   }

   foo();
</script>

foo();
var a=真;
如果(a){
函数foo(){console.log(“a”);}
}否则{
函数foo(){console.log(“b”);}
}
foo();
foo应该首先被提升,并且应该打印“b”作为第一个foo()的输出,对吗?还是我遗漏了什么

解释或链接以理解不同场景中的代码和提升会有很大帮助。

提升(按照您在这里期望的方式)只有在存在明确的优先顺序时才会起作用。在这种情况下,因为您的函数是在if块中定义的,所以它不会像您期望的那样发生

这将有助于:
foo();
var a=真;
函数foo(){console.log(“a”);}

foo()标准ES5 JavaScript语法。解析此代码的能力需要标准语法的扩展,并且ES5实现之间的执行行为不同。我不确定最新规范中的当前立场是什么。在ES6之前,块内的函数声明是未定义的行为。Chrome和Firefox的表现不同(也许他们现在仍然如此)。在ES6中,我相信这些东西不应该再被吊起来了。哈哈,别再写了。我一看眼睛就痛。:)您已经编写了代码。你为什么不试一下呢?如果你有,你可以有更好的/不同的理解,问一个更直接的问题(或者更好的是做一些搜索,看看你是否能找到,或者)。我试过了,没有试过,我从来没有发过问题。我想了解更多,因此向社区询问。无论如何,非常感谢!明白了,谢谢你的快速解释。