ES6中let变量的特点,使用let声明总汇

时间: 2017-12-28阅读: 524标签: ES6

ES6中let变量的特点

1.在ES6之前是没有块级作用域的,let声明变量存在块级作用域,只在它所在的代码块有效
2.let不能先使用再声明
3.暂时性死区,在代码块内使用let命令声明变量之前,该变量都是不可用的
4.不允许重复声明,在相同作用域内,重复声明同一个变量。


1、存在块级作用域  

在不使用let要实现块级作用域,通常借助立即执行匿名函数来实现 :

(function(){
  var a= 1;
}());
console.log(a); //出错,not defined

如果使用Let,在{}就可以生效:

{
  let a = 1;
}
console.log(a); //出错 not defined


2、let不能先使用再声明

console.log(a); //出错,Uncaught ReferenceError: a is not defined
console.log(b);//undefined
let a = 1;
var b=1;

在这个语句块中,在变量声明之前引用这个变量会导致一个 ReferenceError的结果。所以let不能先使用在声明


3、暂时性死区 

在块级作用域内,若存在用let命令声明的变量,则所在区块对该变量形成封闭作用域,也就是该变量无视外部的同名变量。而又因为不存在变量提升,所以在该区块中,不能在声明前使用该变量。

var a  = 1;
if(true){
  a = 2; //出错 not defined
  let a; 
}

对比var

var a = 1;
if(true){
  a = 2; //var允许重复声明,而且变量提升,故a=2正常赋值
var a;
}


 4.不允许重复调用

相同作用域内重复声明同一个变量,也包括不能和var,const变量名重复

let a = 1;
let a = 1; //出错 let不可重复声明

var b = 1;
let b = 1; //出错 let不可重复声明

const c = 1;
let c = 1; //出错 let不可重复声明


 

ES6 中的一些技巧,使你的代码更清晰,更简短,更易读!

ES6 中的一些技巧:模版字符串、块级作用域、Let、Const、块级作用域函数问题、扩展运算符、函数默认参数、解构、对象字面量和简明参数、动态属性名称、箭头函数、for … of 循环、数字字面量。

es6新特性之 class 基本用法

ES6 提供了更接近传统语言的写法,引入了 class(类)这个概念,作为对象的模板。通过class关键字,可以定义类

基于ES6的tinyJquery

Query作为曾经Web前端的必备利器,随着MVVM框架的兴起,如今已稍显没落。用ES6写了一个基于class简化版的jQuery,包含基础DOM操作,支持链式操作...

用 ES6 写全屏滚动插件

这篇文章将介绍如何使用原生 JS (主要使用 ES6 语法)实现全屏滚动插件,兼容 IE 10+、手机触屏,Mac 触摸板优化,支持自定义页面动画,压缩后 gzip 文件只有 2k。

ES6 Decorator_js中的装饰器函数

ES6装饰器(Decorator)是一个函数,用来修改类的行为 在设计阶段可以对类和属性进行注释和修改。从本质上上讲,装饰器的最大作用是修改预定义好的逻辑,或者给各种结构添加一些元数据。

ES6 class创建对象和传统方法生成对象的区别

JS语言传统创建对象的方法一般是通过构造函数,来定义生成的,下面是一个使用function生成的例子。ES5是先新建子类的实例对象this,再将父类的属性添加到子类上,由于父类的内部属性无法获取,导致无法继承原生的构造函数

ES6的7个实用技巧

ES6的7个实用技巧包括:1交换元素,2 调试,3 单条语句,4 数组拼接,5 制作副本,6 命名参数,7 Async/Await结合数组解构

Javascript Proxy对象 简介

ES6 中引入Proxies,让你可以自定义Object的基本操作。例如,get就是Object的基础操作方法。

js解构赋值,关于es6中的解构赋值的用途总结

ES6中添加了一个新属性解构,允许你使用类似数组或对象字面量的语法将数组和对象的属性赋给各种变量。用途:交换变量的值、从函数返回多个值、函数参数的定义、提取JSON数据、函数参数的默认值...

JS 中的require 和 import 区别

require 和 import 区别:遵循的模块化规范不一样,出现的时间不同。Require是CommonJS的语法,CommonJS的模块是对象,输入时必须查找对象属性。