ES6之let命令
ES6新增了let命令,用来声明变量。它的用法类似于var。
let和var声明变量的区别:
1、let声明的变量,只在let命令所在的代码块内有效,出了这个块级作用域就不起作用
先看一个例子:
{
let a=10;
var b=1;
}
console.log(a);
console.log(b);
上述例子运行结果如图:
以上例子中,分别用var和let声明了两个变量,然后在代码块之外调用这两个变量。let定义的a变量会报错 var声明的变量b会返回正确值.这表明,let声明的变量只在它所在的代码块有效。
什么是块级作用域?
任何一对花括号({ })中的语句都属于一个块,在花括号里面用let定义的所有变量在花括号外都是不可见的,我们称之为块级作用域。
2.用var 声明变量的时候会出现“变量提升“的现象,而let声明变量不存在“变量提升“现象。
什么是变量提升?
变量可以在声明之前使用,变量的值为undefined。但let
命令改变了该语法行为,它所声明的变量一定要在声明后使用,否则报错。
例子1:
//var的情况
console.log(a);
var a=10;
//let的情况
console.log(b);
let b=100;
上述例子运行结果如图:
上面代码中,变量a用var
命令声明,会发生变量提升,即脚本开始运行时,变量a
已经存在了,但是没有值,所以会输出undefined
。变量b
用let
命令声明,不会发生变量提升。这表示在声明它之前,变量b
是不存在的,这时如果用到它,就会抛出一个错误。
例子2:
var a = 10;
(function(){
console.log(a);
var a = 20;
})();
上述例子运行结果:undefined
上面代码中,代码一开始已经定义了变量a,值为1,相当于全局变量,但是我们在代码块(函数内)里面还声明并定义了一个变量a,导致变量提升了,实际的代码执行顺序是这样的,
var a = 10;
(function(){
var a;
console.log(a);//先执行声明,接着就执行console.log(a);变量a只是声明还没定义,值便为undefined了。
a = 20;
})();
ES6之let命令的更多相关文章
- ES6之let命令详解
let与块级作用域 { var foo='foo'; let bar='bar'; } console.log(foo,'var'); //foo varconsole.log(bar ,'bar') ...
- 【ES6】let 命令
let命令 为es6新增命令,用来声明变量,类似于var,但是let所声明的变量,只在let命令所在的块级作用域内有效 块级作用域写法(ES6块级作用域允许任意嵌套): // 块级作用域写法 { le ...
- ES6之const命令
一直以来以ecma为核心的js始终没有常量的概念,es6则弥补了这一个缺陷: const foo='foo'; foo='bar';//TypeError: Assignment to constan ...
- ES6的let命令实现猜想
今天看了看阮一峰的<ECMAScript 6入门>的let和const命令,看完let之后自己测试了一把,仿佛处在云里雾里之中.代码如下: "use strict"; ...
- ES6(let.contest命令)
1.作用域概念? 1.全局作用域 2.函数作用域 3.块级作用域(ES6新增) 2.如何使用let和const? 1.代码: 运行结果为1.将let改为var,发现结果不变. 代码: 发现报错!!!( ...
- ES6的let命令
1.let命令所在的代码块内有效: 2.循环的计数器,就很合适使用let命令:(for循环还有一个特别之处,就是循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域.) 例如:如下会输出十次s ...
- 【ES6 】const命令
本质 const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动. 对于简单类型的数据(数值.字符串.布尔值),值就保存在变量指向的那个内存地址,因此等同于常量. ...
- es6
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [转] 《ES6标准入门》读书笔记
来源:https://segmentfault.com/a/1190000005863641 let和const命令 ES6新增let命令,用于声明变量,是块级作用域. let声明的变量不会像var声 ...
随机推荐
- 【java虚拟机系列】JVM类加载器与ClassNotFoundException和NoClassDefFoundError
在我们日常的项目开发中,会经常碰到ClassNotFoundException和NoClassDefFoundError这两种异常,对于经验足够的工程师而言,可能很轻松的就可以解决,但是却不一定明白为 ...
- JVM的GC(概念与深入)
深入浅出了解什么是GC: http://my.oschina.net/xianggao/blog/86985 GC策略详解: http://blog.csdn.net/winniepu/article ...
- 从Storm和Spark 学习流式实时分布式计算的设计
0. 背景 最近我在做流式实时分布式计算系统的架构设计,而正好又要参加CSDN博文大赛的决赛.本来想就写Spark源码分析的文章吧.但是又想毕竟是决赛,要拿出一些自己的干货出来,仅仅是源码分析貌似分量 ...
- iOS中 百度地图详解 韩俊强的博文
需要准备工作按照下图引进类库 需要添加 添加的两个字符串为:NSLocationWhenInUseUsageDescription / NSLocationAlwaysUsageDescripti ...
- “XcodeGhost”病毒之后,苹果更应注…
虽然大家都在期待中秋假期的到来,不过让开发者挺闹心的一件事就是这几天网上.朋友圈以及各种群中炒得沸沸扬扬的"XcodeGhost"病毒事件,就连央视也惊动了!! 事件起源 事件起源 ...
- Dynamics CRM 2011/2013 section的隐藏
代码如下 Xrm.Page.ui.tabs.get("TabName").sections.get("SectionName").setVisi ...
- python循环for,range,xrange;while
>>>range(1,5)#代表从1到5(不包含5) [1,2,3,4] >>>range(1,5,2)#代表从1到5,间隔2(不包含5) [1,3] >&g ...
- 【Android 应用开发】Android 上实现非root的 Traceroute -- 非Root权限下移植可执行二进制文件 脚本文件
作者 : 万境绝尘 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/36438365 示例代码下载 : -- CSDN : htt ...
- C语言中,#include <>和#include ""的区别和注意点
C语言中包含文件有两种包含符号,一个是<>尖括号,另一个是""双引号.那么这两个有什么区别呢? 首先在本地建立一个空文件,命名为stdio.h. 然后再建立一个C文件, ...
- [WinForm]最小化到系统托盘,右键退出
1.拉出一个notifyIcon1到用户界面,也可以NEW一个 2.拉出一个ContextMenuStrip控件,命名为mymenu,集合中增加退出 3.notifyIcon1的属性ContextMe ...