我一直以为浏览器会逐字逐句地从上到下执行JavaScript代码(你有点期望这种行为来自脚本语言).但显然情况并非如此:
//工作完美
<script>
test();
function test() { alert('test'); }
</script>
Run Code Online (Sandbox Code Playgroud)
但如果我将函数声明为变量,它将失败并显示'未捕获的ReferenceError:未定义测试':
<script>
test();
var test = function() { alert('test'); }
</script>
Run Code Online (Sandbox Code Playgroud)
所以javascript引擎有时不会从上到下执行代码.它可以以某种方式预加载函数,即使它们最终被声明.它究竟是如何工作的?为什么?
这是函数和变量提升的示例:函数和变量声明被移动到当前范围的顶部.
您的示例在内部转换为:
情况1:
<script>
function test() { alert('test'); }
test();
</script>
Run Code Online (Sandbox Code Playgroud)
案例2:
<script>
var test;
test();
test = function() { alert('test'); }
</script>
Run Code Online (Sandbox Code Playgroud)
由此可以推断,在第二种情况下test,当您尝试执行变量时,变量是未定义的.
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |