-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JS-ES6-let/const & 变量生命周期 #103
Comments
let/const一、语法规则
<script>
let aLet = 12;
console.log(aLet ) // 12
console.log(window.aLet ) // undefined
</script> <script>
let aLet = 12;
console.log(aLet)
console.log(window.aLet)
</script>
<script>
let bLet = 22;
// let aLet = 12; // 虽然不在同一个script标签里,但是也是重复声明变量
console.log(aLet)
</script>
;(function(){
let a = 12;
{
var a; // SyntaxError: Identifier 'a' has already been declared
}
})()
a = 12;
let a; // ReferenceError: a is not defined
1.2 编码习惯
二、暂时性死区-Temporal Dead Zone (TDZ)处于未初始化状态的变量属于TDZ,只有
参考 |
关于
|
Open
Open
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
变量生命周期
一、变量提升(Hoisting)
变量声明或者函数声明移动到当前作用域的最顶部的过程。一般是指
var
声明变量或者函数声明。二、变量生命周期
var
,函数声明,let
,const
,class
都可以声明变量,JS引擎在处理变量时主要分为3个阶段。1. 声明阶段(Declaration)
即只声明还未初始化(unitialized )的变量
如果发生重复声明,对于
let/const/class
无法进行重复声明的变量则会抛异常。2. 初始化阶段
undefined
。但是对于
let/const variable = 'value'
语句是以value
作为初始值的:对于
let/const variable = 'value'
定义的变量初始化阶段和赋值是一条语句完成的,如果此时取右值发生异常,会导致变量初始化失败,此时变量依旧处于未初始化状态(暂时性死区)。3. 赋值阶段
把右值赋值给变量
4.
var
和函数声明
的不同三、“变量提升”的本质
技术上变量提升是指变量的生命周期的某些阶段被提升了。
var
,函数声明和let/const/class
声明的变量“变量提升”的行为不一致:声明阶段
都会被提升,但此时变量还不能引用;var
变量可以先使用(值为undefined)后声明;let/const/class
则必须先声明(代码里的声明)后使用。不过“变量提示”是从ES3就有的叫法,我们也一般是指
var
和函数声明变量的变量提升行为。基于这点有时我们也称let/const/class
变量不存在变量提升。为了避免疑惑,以后如果再提到“变量提升”时,则需要先明确是哪种声明变量方式。
四、Function declarations should not be placed in blocks
Stack overflow: Function declarations should not be placed in blocks. Use a function expression or move the statement to the top of the outer function
参考:
The text was updated successfully, but these errors were encountered: