码迷,mamicode.com
首页 > 其他好文 > 详细

let 和const命令

时间:2017-04-01 22:45:24      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:全局   java   round   上进   logs   code   基础   back   str   

ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。换句话说,let声明了块级作用域

技术分享

技术分享输出技术分享

看下面代码:

技术分享输出:技术分享

变量ivar声明的,在全局范围内都有效,所以全局只有一个变量i。每一次循环,变量i的值都会发生改变,而循环内被赋给数组afunction在运行时,会通过闭包读到这同一个变量i,导致最后输出的是最后一轮的i的值,也就是10.

可以使用let来重新修改代码:

技术分享输出:4

如果使用let,声明的变量仅在块级作用域内有效,最后输出的是4.变量ilet声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是4。你可能会问,如果每一轮循环的变量i都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。

另外,for循环还有一个特别之处,就是循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域。

 技术分享输出:技术分享

不存在变量提升

    var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。

为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错

 技术分享输出:技术分享

const 命令

const声明一个只读的常量。一旦声明,常量的值就不能改变。

 技术分享输出:技术分享

const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。

 技术分享

const的作用域与let命令相同:只在声明所在的块级作用域内有效。

技术分享

 

let 和const命令

标签:全局   java   round   上进   logs   code   基础   back   str   

原文地址:http://www.cnblogs.com/xuzhudong/p/6657775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!