let 与 var 的区别在于作用域不一样。let被用来做块作用域,它比函数作用域要小一点。
如果他们两个都没有被定义在函数中也没有定义在块作用域中,那么他们就都属于全局作用域。

  1. var 和 let 声明的变量在全局作用域中被定义时,两者非常相似
let bar = 'hehe';
var baz = 'lala'; 
  1. 但是,被let声明的变量不会作为全局对象window的属性,而被var声明的变量却可以
console.log(window.bar);  //undefined
console.log(window.baz); // 'able'

函数作用域
var 和 let 在函数作用域中声明一个变量,两个变量的意义是相同的。

  function  aFun(){
    let bar = 'hehe'; // 函数作用域中的变量
    var baz = 'lala'; // 函数作用域中的变量
}

块作用域
在块作用域中两者的区别较为明显, let只在for()循环中可用,而 var是对于包围for循环的整个函数可用

function  aFun1(){
    // i 对于for循环外的范围是不可见的(i is not defined)
    for(let i = 1; i<5; i++){
        //  i只有在这里是可见的
    }
    // i 对于for循环外的范围是不可见的(i is not defined)
}
function aFun2(){
    // i 对于for循环外的范围是可见的
    for(var i = 1;i<5; i++){
        // i 在for 在整个函数体内都是可见的
    }
    // i 对于for循环外的范围是可见的
}

let 和var 重新声明

  • var允许在同一作用域中声明同名的变量,而let不可以
let me  = 'foo';
let me  = 'bar'; //SyntaxError: Identifier 'me' has already been declared
var me = 'foo';
var me = 'bar'; //这里me被替代了,是可以重复声明的
  • es6中还有一个声明变量的命令const,const和let都是在声明的块作用域中有效,但是let声明的变量可变,值和类型都可以改变,没有限制。const声明额变量不能改变,所以,const一旦声明一个变量,就必须马上初始化,不能留到以后赋值
const hehe; //报错,Missing initializer in const declaration
const a = 3;
a = 5; //报错,Uncaught TypeError: Assignment to constant variable.
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。