我有一個關於變量聲明的問題,如果我在if塊中聲明變量,當JS引擎遇到那條線時,引擎如何設置變量?
我知道這是聲明變量可怕的方式,但只是好奇JS引擎是如何工作的吧:
if(trueSituation){
var a_variable = true;
}else {
var another_variable = false;
}
感謝
我有一個關於變量聲明的問題,如果我在if塊中聲明變量,當JS引擎遇到那條線時,引擎如何設置變量?
我知道這是聲明變量可怕的方式,但只是好奇JS引擎是如何工作的吧:
if(trueSituation){
var a_variable = true;
}else {
var another_variable = false;
}
感謝
JavaScript有一個名爲「可變懸掛」一詞。當你的代碼實際執行中,所有的var
小號被拉外圍函數的頂部:
function foo() {
var a_variable;
var another_variable;
if(trueSituation) {
a_variable = true;
}else {
another_variable = false;
}
}
此前if/else
,可以console.log(a_variable)
作爲特殊值undefined
。作爲一個方面說明,ES6包含一個名爲let
的構造,它允許使用更傳統的塊範圍,然而我相信它仍然將變量提升到塊的頂部。
感謝您的解釋。我有點想知道這個varibale會升高到什麼水平?如果沒有函數範圍,它會到達第一個函數範圍還是全局 – Kuan
@Kuan:'var'提升到函數範圍,'let'提升到阻止範圍 – Bergi
@Bergi謝謝,我想知道是否沒有定義函數並且有多個
在JavaScript中,變量聲明被提升到其包含範圍的頂部。
在你的榜樣所以,這樣的:
if(trueSituation){
var a_variable = true;
} else {
var another_variable = false;
}
…成爲本:
var a_variable, another_variable;
if(trueSituation){
a_variable = true;
} else {
another_variable = false;
}
兩個變量都聲明,但是隻有一個成爲已定義的基礎上,trueSituation
的感實性。
感謝您解釋,我有點想知道varibale會被懸掛在什麼級別?如果沒有函數作用域,它會到達第一個函數作用域還是全局函數 – Kuan
如果在函數之外,或者在其直接函數的範圍內,它將處於全局作用域。 –
謝謝我想知道是否沒有定義功能,並且存在多個
你是什麼意思「你怎麼就知道如何設置變量?」你的意思是「它如何知道如何設置該變量?」 –
@AndreaCasaccia對不起,我的錯字。 – Kuan