JavaScript 学习之 -- let 和 const

let 和 var:let定义的变量,有块级作用域的概念,而var定义的变量则没有。

看如下两个函数:

函数1:

var arr = [];
function f() {
for (var i = 0; i < 5; i++) {
arr.push(function () {
console.log(i);
})
}
}

f();
arr[2]();
这个时候,arr[2]()的值是5


函数2
var arr = [];
function f() {
for (let i = 0; i < 5; i++) {
arr.push(function () {
console.log(i);
})
}
}

f();
arr[2]();
这个时候,arr[2]()的值是2。因为let i=1; 和之前let i=0;出在不同的作用域中,所以两者不会相互影响。所以arr[1]()的值是1,arr[2]()的值是2。


const:

const定义常量,指的是对物理内存地址不可更改。

例如:const a = 12;

           a = 15;

则会抛出异常。

 

但是如果是如下方式:

const a = {
name:'Peter'
}

a.name = 'Wujin';
a.email = "123456789@qq.com";

console.log(a);
则不会抛出异常。

如果想彻底冻结const常量,则可使用Object.freeze()函数。

如下:

const a = {
    name:'Peter'
}

a.name = 'Wujin';
a.email = "123456789@qq.com";



// 冻结内存地址
Object.freeze(a);

a.name = 'Peter'

console.log(a);

 

此时抛出异常

 

 

posted on 2017-02-24 16:33  wujinpeter  阅读(79)  评论(0)    收藏  举报

导航