文章目录
- 发现问题
- let & var 区别
- 其他
发现问题
今天学习Object.defineProperty()
,写了以下代码:
var data = {
a: 10,
b: 20,
};
for (let key in data) {
var val = data[key];
Object.defineProperty(data, key, {
configurable: true,
enumerable: true,
get() {
return val;
},
set(v) {
val = v;
},
});
}
console.log(data.a);
console.log(data.b);
打印结果a,b都是20
var val = data[key];
改为
let val = data[key];
结果就是正常的。
所以查找一下let & var的区别。
let & var 区别
ES6新增了块级作用域
,即变量只在同一个代码块有效(同一个大括号内{ }
)。
在for循环中,每一次循环,都被视作独立的代码块,所以let
声明的变量,值与循环块
绑定在一起,不会受外部影响。
for (let i = 0; i < 10; i++) {
setTimeout(() => {
console.log(i);
}, 100);
}
// 0,1,2,3,4,5,6,7,8,9
相反,var声明的变量,此处作用于全局。
for (var i = 0; i < 10; i++) {
setTimeout(() => {
console.log(i);
}, 100);
}
// 10,10,10,10,10,10,10,10,10,10
其他
let
不存在var
变量提升的问题,而且同一个代码块,let不可以重复声明同一个变量。