概述
关于变量声明
let
的作用是声明一个作用域为某个代码块({})的变量(称为块级作用域)let
不允许变量提升(注: 变量的使用在声明之前)- 块级作用域里的
let
命令之前的区域称之为'暂时性死区', 这意味着死区内即使是typeof
操作也会出错 let
不允许在相同的作用域内重复声明同一个变量, 值得一提的是,for
循环语句的循环体是独立的子作用域, 而循环语句部分(括号内语句)是其父作用域, 这意味着循环语句和循环体内可以定义相同名称的变量
关于函数声明
function f () { console.log('outside') }
(function () {
if (false) { function f () { console.log('inside') } }
f() // inside
}())
- ES5 中的函数声明只允许在全局或函数作用域内, 但是浏览器为了兼容旧代码, 允许在犹如
if
的代码块内声明, 此时, 函数将会被提升到函数头部, 相当于
function f () { console.log('outside') }
(function () {
function f () { console.log('inside') }
if (false) { }
f() // inside
}())
- 而在 ES6 中则相当于(暂时不提原因)
function f () { console.log('outside') }
(function () {
var f = undefined
if (false) { function f () { console.log('inside') } }
f() // error
}())
- 要想 ES6 在块作用域内声明函数需使用
let
声明函数表达式, 如
{
if (false) {
let f = function () {}
}
}
// 注意, 代码块必须在大括号内
if (false) let f = function () {} //error
关于常量声明
- 使用
const
命令声明一个只读的常量, 一旦声明, 常量的值就不能改变 - 由于常量不能改变, 所以在声明时必须初始化
const
命令也存在块级作用域const
命令声明的常量也存在暂时性死区const
命令声明的常量同样不能重复声明- 声明对象/数组常量时, 需要注意的是, 对象的指针地址不能改变(即该常量不能指向新的对象), 但是其对象本身是可以改变的, 如添加和删除属性,如果要将对象冻结, 则使用Object.freeze方法, 对象本身和属性都被冻结
顶层对象与全局变量
- 浏览器环境下, 顶层对象是
window
, node 中顶层对象是global
对象. - ES5 中, 顶层对象和全局变量是等价的, 这种情况下, 会出现很多问题, 比如顶层对象的属性导出可以读写, 这不利于模块化编程.
- ES6 规定
let
,const
,class
命令声明的全局变量不再等于顶层对象 - ES5 顶层对象还存在一个问题, 由于各种环境中(浏览器, Web Woker, Node等)的顶层对象不统一, 而使用
this
变量又存在局限性(如Node和ES6模块中,this
返回的是当前模块), 在想取得顶层对象时需要添加判断条件(这里不赘述)
转载于:https://www.cnblogs.com/xvvx/p/10273986.html
最后
以上就是无限发箍为你收集整理的ES6笔记 -- 变量/语句声明的全部内容,希望文章能够帮你解决ES6笔记 -- 变量/语句声明所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复