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

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

  • 相关阅读:
    3.8 java基础总结①多线程
    RPM Database 实战详解
    关于CentOS7.2 控制面板不显示输入法,或者无法调出输入的问题。(已解决)
    mysqldump
    一些有意思的Linux命令
    和docket的第一次亲密接触
    centos7根分区扩容(亲测有效)
    相识mongodb
    开机自动获取spark用户名和服务器
    Puppet日常总结
  • 原文地址:https://www.cnblogs.com/hzozj/p/11283386.html
Copyright © 2011-2022 走看看