1
头图
  1. var声明提升
    console.log(name)  //土豆
    var name = '土豆';

    使用var声明的变量会自动提升到函数作用域的顶部

    function foo(){
        console.log(name);
        var name = "土豆";
    }
    foo()  //undefined
    
    //等价于
    
    function foo(){
        var name;
        console.log(name);
        name = "土豆";
    }
    foo(); //undefined
    console.log(name)  //ReferenceError name没有被定义
    let name ="土豆";

    而使用let定义的name不会被提升,报出ReferenceError的错误;

  2. var可以重复声明同一个变量
    var name = "番茄";
    var name = "西瓜";
    var name = "土豆";
    console.log(name);//土豆

    而使用let重复声明同一个变量会报错。

    var name = "土豆";
    let name = "土豆";
    console.log(name);//'name' has already been declared
    let name = "土豆";
    var name = "土豆";
    
    console.log(name);//Cannot redeclare block-scoped variable 'name'.
  1. var全局声明
    var name = "土豆";
    console.log(window.name);//土豆
    
    let age = "24";
    console.log(window.age);  //undefined

    使用var定义的变量会被挂载到window上,成为window对象的属性,而使用let不会。

  2. 作用域
    if(true){
        var name = "土豆";
        console.log(name);
    }
    console.log(name);
    //土豆
    //土豆
    
    if(true){
        let age = 24;
        console.log(age);
    }
    console.log(age);
    //24
    //undefined

    使用var声明的范围是函数作用域,使用let声明的范围是块作用域。


土豆
7 声望3 粉丝