zoukankan      html  css  js  c++  java
  • let、var、const

    共同点 

    三者都可以用来声明变量。

    区别

    首先来了解下变量,变量作用范围有全局作用域和方法作用域。

    var与let

    1.出现版本

    ES6之前定义变量只有var;而ES6之后出现了 let,const。

    2.作用域

    var作用域只有全局和函数({})作用域,函数内声明整个函数都可以使用。

    let和const存在块级作用域,类似于java代码块,使用{}包起来的块,例如 iffor的{}{代码块就是块级作用域。作用域仅在于{}这个范围。

    3.全局变量和全局对象的属性

    var声明的全局变量作为属性被挂到window对象,let和const声明的不会,即不会作为全局对象的属性。

    var x = 100;
    console.log(window.x) //100
    console.log(this.x)  //100
    let y = 100;
    console.log(window.y)  //undefined
    console.log(this.y)   //undefined

    4.变量提升

    var定义的变量存在变量提升,即在定义变量之前就可以使用,但为undefined。

    let定义的变量不存在变量提升,即只能在let声明后,方可使用,否则报ReferenceError。ES6规定从花括号开始到let声明这个变量之前的这个范围,都是不可用的,语法上叫做,“暂时性死区”。

    5.重复定义

    var定义的变量可以声明多次,而let不可以。

    console.log(typeof(x) + "---");
    var x  = 100 ;
    var x = 6;
    console.log(x)
    let y = 6;
    console.log(y + "---");

    const

    const作用域与let一致。

    const定义的变量必须经过初始化,即赋值,而且一旦初始化就不可再变更。

    const X = 100;
    X = 10    //Uncaught TypeError: Assignment to constant variable
    const y;    //Uncaught SyntaxError: Missing initializer in const declaration

    注意:如果是常量对象,则由于保存的是对象地址,因此对象内部属性可以改变。

  • 相关阅读:
    实现自己的Linq to Sql
    [分享] 浅谈项目需求变更管理
    【分享】老程序员的经验和价值在哪里?
    程序员是自己心中的“上帝”
    [分享]解析“程序员的十大技术烦恼”
    【分享】帮助你早些明白一些道理
    “风雨20年”的20条精辟编程经验
    【分享】 优秀程序员的代码是“活的”
    给开发人员培训时的语录
    【分享】SQL Server优化50法
  • 原文地址:https://www.cnblogs.com/hzozj/p/11283386.html
Copyright © 2011-2022 走看看