关于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。

posted @ 2017-08-31 17:54  落落月  阅读(457)  评论(0编辑  收藏  举报