• JS之let与const关键字


    1.let关键字

    先放let关键字声明变量的特点总结:

    1. let关键字可以将变量绑定到当前所在作用域(通常是{ .. }内部)

    2. 无法在块级作用域之外的地方访问使用let命令声明的变量

    3. 不允许使用let关键字多次声明同一个变量

    4. 不存在变量提升,使用let关键字声明的变量一定要在声明之后使用,否则将报错

    1.let关键字可以将变量绑定到当前所在作用域(2.无法在块级作用域之外访问声明的变量)

    js的函数作用域不用说了,在函数内不论是用var还是let声明的变量是无法直接被外界访问到的。

    但是JS的块级作用域,如:for(){ .. }if(){ .. }{ .. }代码块等这种都是属于块级作用域,在这些块级作用域中使用var关键字声明的变量,是可以直接在块级作用域以外的地方访问到的,这样会增加污染全局变量的风险。

    就像这样:

    	var a = 1;
    
    	if (true) {
    		var a = 2
    	}
    
    	console.log(a) // a
    

    由于if循环里用var关键字重新给a赋了值,因此打印出来a是2。我们肯定不希望全局的a = 1被污染,此时用let关键字就可以解决这个问题:

    	var a = 1;
    
    	if (true) {
    		let a = 2
    	}
    
    	console.log(a) // 1
    

    此时在for循环里用let声明的a就被绑定到了这个for循环块级作用域中,在for循环代码块之外也就无法访问到了

    3.不允许使用let关键字多次声明同一个变量

    这个非常容易理解了,就是一个变量无法用let关键字声明多次。

    使用var关键字可以将同一个变量a多次声明为不同的值,但是使用let关键字声明的变量却只能声明一次,否则将报错:

    let a = 1
    let a = 2 // Uncaught SyntaxError: Identifier 'a' has already been declared
    
    4.不存在变量提升

    var关键字声明的变量存在变量提升问题,就像下面:

    	console.log(a); // undefined
    	var a = 1
    

    上面的var a = 1会被拆分成这样:

    var a 
    console.log(a) // undefined
    a = 1
    

    这就是变量提升,用var关键字声明的变量会先被提升到所在作用域的最顶端,等实际赋值时才将a赋值为1。

    let关键字就可以避免这个问题,它会提前抛出异常:

    	console.log(a); // Uncaught ReferenceError: Cannot access 'a' before initialization
    	let a = 1
    

    2. const关键字

    const关键字用来声明只读的一个常量。用const声明的变量的值无法被修改。不过需要注意的是声明的变量的类型是基础类型还是引用类型。

    • 基础类型(Number、Boolean、String等)值就保存在变量指向的那个内存地址,因此等同于常量。

    • 引用类型(Object、Array等)变量保存的只是一个指向书记数据的指针,const只能保证指向这个指针的值是不变的,至于它的数据结构是否改变时无法控制的

    const关键字和let一样也可以把当前变量绑定到当前作用域中。

    3.ES6声明变量的6中方法

    ES5只有两种声明变量的方式:varfunction。ES6除了添加letconst命令,还加了两种声明变量的方式:importclass命令

  • 相关阅读:
    InstallShield2015制作安装包----------卸载前结束执行中的进程
    InstallShield2015制作安装包----------安装过程中修改文件内容
    InstallShield2015制作安装包----------卸载后删除安装目录和文件
    InstallShield2015制作安装包----------安装后实现自动运行
    snmp getTable demo :iftable ipAddresstable
    snmp
    Android Lazy url
    eclipse key
    demo16Toast
    demo15 AlertDialog
  • 原文地址:https://www.cnblogs.com/codexlx/p/16392087.html
Copyright © 2020-2023  润新知