js中var, const, let的区别

来源:互联网 发布:程氏cms 编辑:程序博客网 时间:2024/04/28 06:12

var声明的变量可以修改,初始化的时候可以不赋值,不会报错,输出结果为undefined.

var a = 0;console.log(a)//输出0function change(){    a = 1;    console.log(a);//输出1}change();console.log(a);//输出1

const和let声明的变量都只在块级作用于内有效,不同的是const声明的变量不可改变,而且const在声明变量的时候必须赋初值,否则会报错,但是let声明的变量可以改变类型和变量值。

const a = 0;//const a;//这一行将会报错,必须初始化值console.log(a);const b = 0;//b = 1;//这一行将会报错,不能修改赋值console.log(b);

对于复合类型的变量,数组、对象等类型,变量名不指向值,而是指向数据所在的地址。const声明的变量,保证变量指向的地址不变,可以修改,但是必须保证对应的地址不发生改变。

const demo = [];//demo = [0, 1, 2];//这一行将报错,因为此时demo对应的地址与[]的地址不是同一个demo[0] = 0;demo[1] = 1;demo[2] = 2;console.log(demo.length);//输出3,demo指向的地址没有发生改变,改变的只是内部的数据。

let声明的变量只在块级作用域里面起作用。

let a = 0;console.log(a);//输出0function change(){    let a = 1;    console.log(a);//输出1}change();console.log(a);//输出0

注意:如果想让数组、对象等类型变量的地址和数据不被修改,可以使用Object.freeze(name)对变量进行冻结,冻结以后的对象,一切修改地址和数据的操作都将不会生效,对象的地址和内部数据以及对象的属性都将会冻结。
参考文章:http://www.cnblogs.com/dupd/p/6096235.html

0 0
原创粉丝点击