ES6中的let和const关键字

 

ES5中只有var能够定义变量,作用域是在function中。

ES6中可以用let来定义变量,定义是块级作用域变量。

{

let a = 10;

var b = 20;

}

console.log(a); //报错

console.log(b); //20

let的声明范围就是{}内部。

比如循环语句中定义函数,此时var:

var arr = [];

for(let i = 0 ; i < 10 ; i++){

arr[i] = function(){

console.log(i);

}

}

arr[6](); //10

输出10而不是6,因为函数中的i是全局作用域的i,定义其他函数的时候,扰动了i的值。

但是,如果用let定义:

var arr = [];

for(let i = 0 ; i < 10 ; i++){

//i实际上定义在了循环体中

arr[i] = function(){

console.log(i);

}

}

arr[6](); //6

如果用let来引导循环,出了循环体就真的没有定义了

for(let i = 0; i < 10 ; i++){

//相当于在这里定义了i

}

console.log(i);  //报错

不存在变量声明的提升:

console.log(a); //报错

let a = 10;

let会引发暂时性死区(面试常考):

在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

var m = 10;

function fun(){

m = 20;  //报错。函数在预解析阶段会预读所有的语句,发现了let语句,所以就将这个函数变为了一个m的暂时性死区,此时m不允许在let前被赋值。

let m;

console.log(m);

}

fun();

暂时性死区是一个特别好的性质,比如我们之前特别经典的题目:

var m = 10;

function fun(){

m = 20;

var m = 30;

}

fun();

console.log(m);  //输出10,因为函数里面有变量声明的提升,所以改变的都是局部变量m,没有改变全局变量m的值。

但是如果用let:

var m = 10;

function fun(){

m = 20;    //语句有错误!因为这里是暂时性死区,不能对m在let之前操作。

let m = 30;

}

fun();

console.log(m);   //报错

const命令表示定义一个常量,不能被更改的量:

const pi = 3.14;

console.log(pi);

pi = 3.1415;  //报错

但是可以指向一个引用类型值,对这个引用类型值的操作是允许的,但是不能允许指向别的值:

const arr = ["白板","幺鸡","二条"];

arr.push("三筒");

console.log(arr);    // 合法,["白板","幺鸡","二条","三筒"];

arr = ["王","王","2","2","2","2"];  //报错,因为arr是常量。

如果要冻结对象,用Object.freeze()

const arr = Object.freeze(["白板","幺鸡","二条"]);

console.log(arr); //合法

arr.push("三桶"); //报错!因为对象已经被冻结!

Object.freeze()只能冻结一层:

var obj = Object.freeze({"a" : 1 , "b" : 2 , "c" : ["J","Q","K"]});

obj.a = 44; //没有修改成功

obj.c.push("A"); //A成功推入了数组,因为freeze只能冻结1层

console.log(obj); //{"a" : 1 , "b" : 2 , "c" : ["J","Q","K","A"]};

let和const定义的变量不会成为window对象的属性,

let a = 100;

var b = 200;

const c = 300;

alert(window.a);  //undefined

alert(window.b);  //200

alert(window.c);  //undefined

原文地址:https://www.cnblogs.com/feixiangdoit/p/8708615.html

时间: 2024-11-05 20:10:05

ES6中的let和const关键字的相关文章

ES6中表达export default const是无效的

问题 如果您是ES6新手,可以参考一下本文--高手请移驾别往!请先看下面的图形描述: 也就是说,ES6中default后面是不允许跟const关键字的. 分析 上图中表达可以更换成另一种形式,就可以了,如下所示: const decreaseAction={type:'decrease'} export default decreaseAction 引用 1,https://segmentfault.com/q/10100000101260102,https://blog.csdn.net/zh

详解ES6中的 let 和const

  前  言 JRedu ECMAScript 6 是 JavaScript 语言教程,全面介绍 ECMAScript 6 新引入的语法特性. ES6 与上一个版本 ES5 的所有不同之处,对涉及的语法知识给予详细介绍,并给出大量简洁易懂的示例代码. ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言. 那今天就让我们来详细了解一

关于var和ES6中的let,const的理解

var的作用就不多说了,下面说说var的缺点: 1.var可以重复声明 var a = 1; var a = 5; console.log(a); //5 不会报错 在像这些这些严谨的语言来说,一般是不允许重复声明的. 2.无法限制修改 var a = 5; a = 6; console.log(a); //6 不会报错 3.没有块级作用域 if(true){ var a = 5; } console.log(a) // 5 以上几个就是我个人对var的看法 ES6中,多了两个声明let 和 c

ES6中的let和const

let和const let 用来声明变量,但是所声明的变量只在let命令所在的代码块内有效 { let a=12 alert(a)//12 } alert(a)//报错 找不到 let不像var那样会发生变量提升,所以一定要先声明后使用. console.log(foo); //undefined console.log(bar); //报错 var foo = 2; let bar = 3; let不允许在相同作用域内重复声明同一个变量. let a=12; let a=5;//报错 cons

ES6中的let和const命令

1.let命令 1)基本用法 let命令是ES6新增的命令,用来声明变量,类似于var,但let声明的变量只在let命令所在的代码块范围内有效. 2)不存在"声明提前" let声明的变量不存在"声明提前",变量一定要在声明后使用,否则会造成报错,例如: console.log(a);//undefined console.log(b);//报错! var a=3; let b=3: 3)暂时性死区 只要块级作用域内存在let命令,它所声明的变量就绑定了当前块级作用域

let 关键字和 const 关键字

在 ES6 中,提供了 let 关键字和 const 关键字. let 的声明方式与 var 相同,用 let 来代替 var 来声明变量,就可以把变量限制在当前代码块中. 使用 const 声明的是常量,其值一旦被设定便不可被更改. let 允许你声明一个作用域被限制在块级中的变量.语句或者表达式.与var关键字不同的是,它声明的变量只能是全局或者整个函数块的. let 语法: let var1 [= value1] [, var2 [= value2]] [, ..., varN [= va

ES6入门之let和const命令

前言 大家好,我是一只流浪的kk,当你看到这边博客的时候,说明你已经进入了ES6学习的领域了,从本篇博客开始,我将会将自己学习到ES6的相关知识进行整理,方便大家参考和学习,那么我将带你进入第一节的内容学习let和const命令,本篇博客从三个方面进行全方位解析. let命令 首先我们需要学习的是let命令的使用,这个使用非常简单,它其实也是声明变量的一种方式,和var相比我把它的特点总结了如下四点,一起来看看吧! (1):基本用法 <!DOCTYPE html> <html> &

es6中let,const区别与其用法

ECMAScript 是什么? 首先,我们都知道JavaScript由三部分组成:ECMAScript,DOM,BOM: 其中的ECMAScript是Javascript的语法规范. ECMAScript定义了很多东西,如: 语法-----解析规则,关键字,语句,声明,操作等 类型-----布尔型,数字,字符串,对象等 原型和继承 内置对象,函数的标准库----------JSON, Math, 数组方法,对象方法等 浏览器兼容: 目前Google和Firefox浏览器对ES6新特性的兼容最友好

ES6 let const关键字

在es6中,引入了let和const关键字: 1.letES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. (1)在块级作用域里有效(比如循环遍历内部就可以用let定义变量) <script type="text/javascript"> { let a = 10; var b = 1; } console.log(b); console.log(a); </script> 报错:Reference