var/let/const的知识点

284 阅读2分钟

1.var关键字

  1. var声明作用域 使用 var 在一个函数内部定义一个变量,就意味着该变量将在函数退出时被销毁
function test() {
    var message = 'chengxuyunxiaoshi';
}
test();
console.log(message)            //出错
  1. var声明变量提升 所谓的“提升”(hoist),也就是把所有变量声明都拉到函数作用域的顶部
function foo() {
    console.log(message);
    var message = 'chengxuyuanxiaoshi';
}
foo()   //undefined

提升后的代码如下:

function foo() {
    var message;
    console.log(message);
    message = 'chengxuyuanxiaoshi';
}
foo()   //undefined
  1. var可以多次声明同一个变量
function foo() {
    var age = 16;
    var age = 18;
    var age = 20;
    console.log(age);
}
foo()  //20

4.全局声明

var在全局作用域中声明的变量会成为 window 对象的属性

var name = "chengxuyuanxiaoshi";
console.log(window.name);  //chengxuyuanxiaoshi

2.let关键字

  1. let声明作用域 let 声明的范围是块作用域
if(true) {
    let age = 20;
    console.log(age); //20
}
console.log(age);  //错误

2.let不能变量提升

let 声明的变量不会在作用域中被提升【暂时性死区】

console.log(age);  //错误,age没有定义
let age = 20;

3.let出现冗余声明

let 也不允许同一个块作用域中出现冗余声明

let age;
var age;  //错误,age已经声明过

4.全局声明

var在全局作用域中声明的变量不会成为 window 对象的属性

let name = "chengxuyuanxiaoshi";
console.log(window.name);  //undefined

3.const关键字

const与let基本相同,唯一一个重要区别是,是用const声明变量时必须同时初始化变量,且 不能修改 const 声明的变量

const age = 20;
age = 21;  //错误

4.声明风格及最佳实践

  1. 不使用 var,因为使用 let 和 const 有助于提升代码质量,此时的变量有了明确的作用域、声明位置,以及不变的值。
  2. const 优先,let 次之。发者可以推断某些变量的值永远不会变,同时也能迅速发现因意外赋值导致的非预期行为