基礎賦值提公升
console.log(a);var a = 1;//
輸出 undefined
相當於**:
vara;console.log(a);
a = 1;
在**中使用 var 來宣告變數的時候,會提到當前作用域的頂端,而賦值操作在原處不變。
var a宣告向上提公升,a=1賦值留在原處。
不使用var賦值
console.log(a); //referenceerror: a is not defined
console.log(b); //
referenceerror: a is not defined
a = 1;
let b = 1;
控制台報錯,只有使用 var才會變數提公升。
在 if 中提公升
console.log(a) //undifined
if(false
)
相當於**:
varaconsole.log(a)
//undifined
if(false
)
多個
<script
>
console.log(a)
script
>
<
script
>
vara =1
;script
>// 控制台報錯
控制台報錯:referenceerror: a is not defined,
變數提公升不能跨script。
函式提公升
console.log(foo);var foo=10;
console.log(foo);
function
foo()
console.log(foo);
//輸出 function a,10,10
變數宣告會提公升,函式宣告也會,並且函式提公升會優先於變數。
相當於**:
functiona()var
a;console.log(a);
a=10;
console.log(a);
console.log(a);
但是,如果用函式表示式,那就只提公升了這個 a變數,符合之前的變數提公升的邏輯。
a();var a = function
() //
typeerror: a is not a function
相當於**:
varaa();
a = function
()
理解變數提公升
es5提供了兩種變數宣告的方式,分別是var和function。var是變數宣告,function是函式宣告。函式宣告優先於變數宣告,解析器會率先讀取函式宣告,並使其在執行任何 之前可用。理解乙個過程 程式設計師都知道計算機只能識別0和1,也就是二進位制。那麼計算機是怎麼識別 的呢?計算機執行 前會...
函式提公升和變數提公升的理解
下面我們來看兩個例子 1.a 2 var a console.log a 這裡你可能會認為輸入的結果是undefined,因為 var a 宣告在 a 2 之後,會把之前的宣告復蓋掉,所以結果是 undefined。但實際上列印的結果會是2 2.console.log a var a 2 鑑於上乙個...
深入理解js的變數提公升和函式提公升
一 變數提公升 在es6中提出了塊級作用域,用var宣告的變數,起作用域應為對整個塊都起作用,所以會跑偏 而且使用var宣告的變數會出現 變數提公升 現象。那麼什麼是變數提公升呢?用以下 直觀感受一下 其執行順序應為 二 函式提公升 js中建立函式有兩種方式 函式宣告式和函式字面量式。只有函式宣告才...