let var 区别
1.不存在变量提升
var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined
2.暂时性死区
只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
3.let 不允许重复性声明
// 0
var testggg = function () {
var arr = []
for(var i = 0; i < 5; i++){
arr.push(function () {
return i*i
})
}
return arr
}
var testg = testggg();
console.log(testg[1]()) // 25
//1.
var test = function () {
var arr = []
for(var i = 0; i < 5; i++){
arr.push(function (n) {
return function () {
return n * n
}
}(i))
}
return arr
}
var test1 = test()
console.log(test1[0]()) // 0
//2.立即执行函数
var testss = function () {
var arr = []
for(var i = 0; i < 5; i++){
arr.push(function (n) {
return n*n
}(i))
}
return arr
}
var testssss = testss()
console.log(testssss[2]) //4