Javascript吊装混乱
Javascript hoisting confusion
我读了 Kyle 的 I don't know JS
并了解到函数声明将 hoist
在 var
之前。所以在下面的代码中
<script>
foo();
var a = true;
if ( a ) {
function foo() { console.log( "a" ); }
}else {
function foo() { console.log( "b" ); }
}
foo();
</script>
foo 应该首先被提升并且应该打印 "b" 作为第一个 foo() 的输出,对吗?还是我遗漏了什么?
解释或 link 理解代码并在不同场景中提升将有很大帮助。
提升(以您在这里期望的方式)只有在存在明确的先例顺序时才会起作用。在这种情况下,因为您的函数是在 if 块中定义的,所以不会像您期望的那样提升它。
这将起作用:
foo();
var a = true;
function foo() { console.log( "a" ); }
foo();
因为它从等式中删除了您的 if 语句。
我读了 Kyle 的 I don't know JS
并了解到函数声明将 hoist
在 var
之前。所以在下面的代码中
<script>
foo();
var a = true;
if ( a ) {
function foo() { console.log( "a" ); }
}else {
function foo() { console.log( "b" ); }
}
foo();
</script>
foo 应该首先被提升并且应该打印 "b" 作为第一个 foo() 的输出,对吗?还是我遗漏了什么?
解释或 link 理解代码并在不同场景中提升将有很大帮助。
提升(以您在这里期望的方式)只有在存在明确的先例顺序时才会起作用。在这种情况下,因为您的函数是在 if 块中定义的,所以不会像您期望的那样提升它。
这将起作用:
foo();
var a = true;
function foo() { console.log( "a" ); }
foo();
因为它从等式中删除了您的 if 语句。