美文网首页
关键字 let 和 const

关键字 let 和 const

作者: 亚历山大猫 | 来源:发表于2016-11-21 16:33 被阅读0次

开始学习ES6,这里是第一篇笔记,首先记录了2个基础的letconst关键字。

let

let 关键字带来了块级作用域。

es6之前,我们只有全局作用域和函数作用域,而let的出现宣示着块级作用域的到来,我觉得这是JavaScript在逐渐变得严谨起来,并向我们扔出了一系列的“语法糖”。

// 传统的 var 关键字
var a = [];
for(var i = 0; i < 6; i++){
  a[i] = function(){
    return i;
   }
}
a[3](); // 6
a[5](); // 6

// ES6 新增的 let 关键字
var b = [];
for(let j = 0; j < 6; j++){
  b[j] = function(){
    return j;
  }
}
b[3](); // 3
b[5](); // 5

let 不存在变量提升

var关键字在声明变量时,会有一种“变量提升”(预解析)机制(提醒自己一下:function函数声明也一样,优先级要比变量提升要高,函数表达式等同变量声明)。然而,let却不存在变量提升机制:

function foo(){
    a = 6;
    console.log(a);
    let a;
}
foo(); // Uncaught ReferenceError: a is not defined

暂时性死区(temporal dead zone,简称TDZ)

其实,不止变量提升,letconst声明的变量有更严格的设置,letconst声明的变量会绑定所在块级作用域。假如说,我用letconst声明了一个变量variable1,那么在作用域内,在声明语句前引用该变量都会导致错误,即使该变量在外部有声明或赋值。

var variable1 = "kawi";
function foo(){
    typeof(variable1);
    let variable1;
}
foo(); // Uncaught ReferenceError: variable1 is not defined

上面例子中代码与变量提升的非常相似,但要解释的东西完全不一样。


禁止重复声明

以往在编写JavaScript代码时,var关键字过于灵活的特性以至于我们可能在某些业务场景中不严谨的重复定义某个变量。例如:

for(var i=0; i<3;){
    i++
}
console.log(i); // 3

for(var i=0; i<6;){
    i++
}
console.log(i); // 6

前面已经领会过letconst有多讲究严谨,重复用它们定义一个变量,是会导致错误的:

function foo(param){
    let param = 1; // Uncaught SyntaxError: Identifier 'param' has already been declared
}

function foo(){
    let param = 1;
    var param = 2; // Uncaught SyntaxError: Identifier 'param' has already been declared
}

块级作用域的嵌套

像下面这样的嵌套是可以的:

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

const

const关键字用于定义恒量,也就是不变的值。

const 是可读的,不可写的。

const a = 1;
a = 2; // Uncaught TypeError: Assignment to constant variable.

const 声明变量时一定要赋值。

const a; // Uncaught SyntaxError: Missing initializer in const declaration
a = 2;

const 声明变量,并赋值引用类型

当我们用const定义一个变量,并赋值一个引用类型对象,这个对象是可以修改的。例如:

const arr = [];
arr[1] = 1;
console.log(arr.length); // 2

原因,指针嘛,指针不变就OK啦!

(PS:在ES6中一共有6个关键字:varfunctionletconstimportclass

相关文章

  • 【JS】从ECMA学习let、const、var变量声明与声明提

    let、const、var是JS中的声明关键字 let和const 我们熟知的let和const的特性,常见的就有...

  • js 中声明常量关键字 var、let、const

    js 中声明常量的关键字:var、let、const,其中 let 和 const 是 ES6 中新增的关键字。 ...

  • let和const

    let/const(常用) let和var 区别 let,const用于声明变量,用来替代老语法的var关键字,与...

  • ES6新特性

    块作用域 let和const有关let 关键字(只在{}作用域内有用)const 关键字(常量也用于块即作用符 ...

  • 浅谈 var、let 和 const (一)

    浅谈 var、let 和 const (一) 前言 ES6新增了 let 和 const 两个关键字 ,用于声明变...

  • 用实例说话:ES6的十大特性

    1. const和let关键字 const用于定义常量。 let用于定义变量。但是JavaScript中不是已经有...

  • es6学习一

    let和const 介绍let和const之前先说说var关键字,他有几个特点: 可以重复声明 无法限制修改 没有...

  • javascript碎片知识000

    const let var 3者的区别。 const 和 let 为es6新增的定义变量的关键字。 var存在...

  • es6 :let const 解构赋值

    let,const let和const是es6新增的两个变量声明关键字,与var的不同点在于:(1)let和con...

  • 2018-09-04

    js变量和常量 JS中与变量常量声明相关的关键字有var、let以及const,其中let和const是ES6的新...

网友评论

      本文标题:关键字 let 和 const

      本文链接:https://www.haomeiwen.com/subject/npeupttx.html