上网查了一下关于这个方面的资料,大部分都是关于两个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。