js中的var,const,let关键字

  1.let与var的区别

        let 跟var 的作用差不多,但有着非常重要的区别。最明显的区别是,let 声明的范围是块作用域,而var 声明的范围是函数作用域。

(块级作用域:一对大括号就可以看成是一块,在这块区域中定义的变量,只能在这个区域中使用,但是在js中在这个块级作用域中定义的变量,外面也能使用。说明:js没有块级作用域,,只有函数除外。)

        块级作用域原创链接:JavaScript 的变量的全局作用域、局部作用域、块级作用域理解_奋斗的吧小菜鸟的博客-CSDN博客_全局作用域和局部作用域和块级作用域

        let 也不允许同一个块作用域中出现冗余声明,这样会导致报错 。JavaScript引擎会记录用于变量声明的标识符及其所在的块作用域,因此嵌套使用相同的标识符不会报错,而这是因为同一个块中没有重复声明

var name = 'Nicholas';
console.log(name); // 'Nicholas'
if (true) {
var name = 'Matt';
    console.log(name); // 'Matt'
}
let age = 30;
console.log(age); // 30
if (true) {
    let age = 26;
    console.log(age); // 26
}

      

         let 与var 的另一个重要的区别,就是let 声明的变量不会在作用域中被提升

if (true) {
    var name = 'Matt';
    console.log(name); // Matt
}
console.log(name); // Matt
if (true) {
    let age = 26;
    console.log(age); // 26
}
console.log(age); // ReferenceError: age没有定义

        

        用let 之后,for 循环定义的迭代变量会渗透到循环体外部这个问题就消失了,因为迭代变量的作用域仅限于for 循环块内部

for (var i = 0; i < 5; ++i) {
// 循环逻辑
}
console.log(i); // 5
for (let i = 0; i < 5; ++i) {
// 循环逻辑
}
console.log(i); // ReferenceError: i没有定义

2.const与let 

        const 的行为与let 基本相同,唯一一个重要的区别是用它声明变量时必须同时初始化变量,且尝试修改const 声明的变量会导致运行时错误

const age = 26;
age = 36; // TypeError: 给常量赋值
// const也不允许重复声明
const name = 'Matt';
const name = 'Nicholas'; // SyntaxError
// const声明的作用域也是块
const name = 'Matt';
if (true) {
    const name = 'Nicholas';
}
console.log(name); // Matt

        

        虽然const 变量跟let 变量很相似,但是不能用const 来声明迭代变量(因为迭代变量会自增)

for (const i = 0; i < 10; ++i) {} // TypeError:给常量赋值

3.使用

 尽量不使用var,const 优先,let 次之

猜你喜欢

转载自blog.csdn.net/woai_mihoutao/article/details/123998611
今日推荐