关于js代码执行顺序
上网查了一下关于这个方面的资料,大部分都是关于两个script标签中的js代码和变量以及函数提升方面的知识。
1、两个script标签
<script> alert("我是代码块一"); alert(test); //undefined var test = "str1"l </script> <script> alert("我是代码块二"); alert(test); //str1 </script>
特点:两代码块执行独立,变量共享;
关于变量和函数提升方面,已了解。
2.关于我自己的困惑,先贴上一段代码:
var a = []; for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 6
为什么会输出6,
在我看来,函数调用的时候才对里面的变量进行操作,而此时,外部的i++操作已经完成了,而且i为全局变量的话,值是改变的,所以当操作i的时候,外部的i已经被赋值为10;即函数定义过程中i的被引用,但是i的值还在改变,所以最后调用的时候,依旧是全局的 i ,但是其值已发生改变。而let使用的时候,是局部的 i,因此函数调用的时候,引用为 局部 的 i,因此调用的时候,i值为for循环 每次被赋值的 i。