授权网站系统,如何做招聘网站效果评估,html简单网页成品,中国城乡建设网关于变量声明 let的作用是声明一个作用域为某个代码块({})的变量(称为块级作用域)let不允许变量提升(注: 变量的使用在声明之前)块级作用域里的let命令之前的区域称之为暂时性死区, 这意味着死区内即使是typeof操作也会出错let不允许在相同的作用域内重复声明同一个变量, 值得一… 关于变量声明 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 undefinedif (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