js中的變量提升和函數提升
在js中對變量進行操作後列印值經常會出現undefined的現象。其實原因是因為js中有一個叫做變量提升的功能。舉例:
var data="lyyyyy";
getData();
function getData(){
//第一次列印
console.log("data值為: ", data);
var data="yyyyyyy";
//第二次列印
console.log("data值為: ", data);
}
列印的值第一個為undefined,而第二個列印的值為yyyyy.
原因:
在執行getData()方法的時候會在函數内部首先将變量的聲明提升到第一步。
然後再聲明函數内部的函數(如果函數内部有函數的話)。
之後才會按照方法内部的邏輯先後順序執行代碼。前兩步隻是聲明!!!
看到這裡應該就已經知道為什麼會有上面那樣的結果了。
實際的方法内部代碼執行順序應該是這樣的:
function getData(){
//一。聲明變量
var data;
//二。聲明函數(如果函數内部有函數的話)
//三。按照代碼的順序執行
console.log("data值為: ", data);
data="yyyyyyy";
//第二次列印
console.log("data值為: ", data);
}
看到拆分後的代碼執行順序對結果也就不迷茫了。
為什麼有變量提升
==那麼為什麼會出現變量提升這個現象呢?==