快捷导航
查看: 435|回复: 0

ES2015 块级作用域简单介绍

[复制链接]
发表于 2016-5-6 14:46:27 | 显示全部楼层 |阅读模式
本帖最后由 antzone 于 2016-5-8 00:30 编辑

ES2015块级作用域简单介绍:
在ES2015之前,只有函数作用域和全局作用域。
代码实例如下:
[JavaScript] 纯文本查看 复制代码运行代码

function func() {
  var antzone = "蚂蚁部落";
}
func()
console.log(antzone);

上面的代码会报错,因为变量antzone只在函数作用域中有效。
再来看一段代码实例:
[JavaScript] 纯文本查看 复制代码运行代码

for (var index = 0; index < 5; index++) {
  //code
}
console.log(index);

由于没有块级作用域,所以打印结果为5。
一.块级作用域概念:
任何一对花括号({})中的语句集都属于一个块。
在这个块中,使用let和const声明的变量和常量对外都是不可见的,我们称之为块级作用域。
只有使用let和const声明的变量或者常量在块对外是不可见的,使用var声明的变量对外依然是可见的。
我们可以这么认为,是let和const创建了块级作用域。
关于let和const可以参阅以下两篇文章:
(1).let可以参阅ES2015 let命令一章节。
(2).const可以参阅ES2015 const命令一章节。
代码实例:
[JavaScript] 纯文本查看 复制代码运行代码
if (true) {
  let url = "www.softwhy.com";
}
console.log(url);

使用let声明的变量url只在所在块级作用域内有效。
二.语句块和对象直接量的区别:
不要把对象直接量看做是块级作用域,代码如下:
[JavaScript] 纯文本查看 复制代码运行代码

var obj = {
  webName: "蚂蚁部落",
  url: "softwhy.com",
  address:"青岛市南区"
}

上面的代码使用大括号创建了一个对象直接量,我们不能认为这是一个语句块。再来看一段代码实例:
[JavaScript] 纯文本查看 复制代码运行代码
{
  webName: "蚂蚁部落",
  url: "softwhy.com",
  address:"青岛市南区"
}

代码会报错,因为如果代码最左边为大括号,那么就会被解读为语句,而不是对象直接量。
上面的代码会被解读为标签语句,具体可以参阅js标签语句用法简单介绍一章节。
只要在外面包裹一个小括号就不会报错了:
[JavaScript] 纯文本查看 复制代码运行代码
({
  webName: "蚂蚁部落",
  url: "softwhy.com",
  address:"青岛市南区"
})

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们|手机版|小黑屋| 蚂蚁部落 ( 鲁ICP备10022556号-3 )

GMT+8, 2017-2-26 00:09 , Processed in 0.076611 second(s), 20 queries .

Powered by Discuz! X3.2 Licensed

Copyright © 2012-2017 Design: 蚂蚁部落

快速回复返回顶部 返回列表