let 以及 const

let 以及 const

let命令

  • let 声明的变量只在它所在的代码块有效。

//let 声明 只在当前作用域有效

var a = [];

for (let i = 0; i < 10; i++) {

a[i] = function () {

console.log(i);

};

}

a[6](); // 6

//var 声明 在全局作用域有效

var a = [];

for (var i = 0; i < 10; i++) {

a[i] = function () {

console.log(i);

};

}

a[6](); // 10

  • let 不存在变量提升,在let声明之前使用变量,会报错ReferenceError

// var 的情况

console.log(foo); // 输出undefined

var foo = 2;

// let 的情况

console.log(bar); // 报错ReferenceError

let bar = 2;

  • let 不允许重复声明

// 报错

function () {

let a = 10;

var a = 1;

}

// 报错

function () {

let a = 10;

let a = 1;

}

不能在函数内部重新声明参数


function func(arg) {

let arg; // 报错

}

function func(arg) {

{

let arg; // 不报错

}

}

const 命令

  • 一旦声明,常量的值就不改变,只在声明所在的块级作用域有效。

  • const 命令声明的常量也是不提升,同样存在暂时性死区。

  • 本质: const 实际上保证的,不是变量的值不能改动,而是变量指向的那个内存地址不得改动。对于简单的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型(引用类型)的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针, const 只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,不能控制。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容