Javascript吊装混乱
我读了Kyle的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
我不知道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中,我相信这些东西不应该再被吊起来了。哈哈,别再写了。我一看眼睛就痛。:)您已经编写了代码。你为什么不试一下呢?如果你有,你可以有更好的/不同的理解,问一个更直接的问题(或者更好的是做一些搜索,看看你是否能找到,或者)。我试过了,没有试过,我从来没有发过问题。我想了解更多,因此向社区询问。无论如何,非常感谢!明白了,谢谢你的快速解释。