听了几遍,我也还是不能理解为什么i都是3?
为什么是变量提升(把变量的声明提到所在作用域的最顶端)就使得结果i*2都是等于6呢?
为什么是变量提升(把变量的声明提到所在作用域的最顶端)就使得结果i*2都是等于6呢?
2019-05-09
你的理解是错的,这个跟闭包没关系,闭包只是能访问外部函数的变量i而已。
首先要理解该问题要明白js是从上至下执行的;
在代码从上至下执行到for循环的时候执行了3次,每次i加一,但是循环体内只是把数组callbacks[i]赋值了一个函数(function),但是该函数并没有执行,此时如果出入callbacks[i]得到的都是function的字符串;所以此时并没有执行function里面的console.log输出i的值。
在代码的最后一句console.table()中写的是:callbacks[0](),这句代码的意思就是执行了callbacks[0]指向的function,这时候才会执行function的内容而不是返回字符串;
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures可以看下这里讲的闭包定义,感觉应该比较好理解了
举报