JavaScript 中對變數和函式宣告的提前樣本,javascript樣本
如題所示,看下面的樣本
(可以使用Chrome瀏覽器,然後F12/或者右鍵,審查元素.調出開發人員工具,進入控制台console輸入)
(提示: 控制台輸入時Shift+Enter可以中途代碼換行)
var name = "xiaoming"; (function(){ var name = name || "小張"; console.info(name);})();// 小張(function(){ name = name || "小張"; console.info(name);})(); // xiaoming(function(){ var name2= name; var name = name || "小張"; console.info(name, name2);})(); // 小張 undefined
執行時的如下所示:
解釋如下:
在JavaScript中,
function xxx(){ // 一堆代碼... // ... var name2 = name; var name = name || "小張"; // 一堆代碼}
執行時會變成這種等價形式:
function xxx(){ var name2 = undefined; var name = undefined; // 其他 var 也會被提前到最起始處 // 一堆代碼... // ... name2 = name; name = name || "小張"; // 一堆代碼}
你還可以參考 Bootstrap中文網的教程
JavaScript 中對變數和函式宣告的提前(hoist)
日期: 2014-11-07
作者: 鐵錨(http://blog.csdn.net/renfufei)
急,問javascript變數聲明的問題?
第一:
<script language="javascript">
var kk="123";
ss="789";
document.write (kk+'<br>'+ss);
</script>
本來聲明變數是這樣寫的var kk="123",ss="789";
現在我把ss寫到下一行,那麼這個時候ss算不算是已經用var聲明過的變數?
*****************************************************
答:
var kk="123";//請檢查你這裡是不是寫錯成了“;(分號)”,正確的是逗號(,);
正確的定義方法:
var kk="123",//注意這裡要用逗號
ss="789",
aa="11",
bb="22",
cc="33",
//可以定義無限個變數
xx="77",
yy="88",
zz="99";//到了最後一個才用分號,而且是必須用分號;
第二:
<script language="javascript">
var kk="123";
kk="789";
document.write (kk+'<br>'+ss);
</script>
本來我是這樣寫的var kk="123",kk="789";
現在我把kk="789"換到了下一行,那麼這個時候kk是不是同一個變數又用var重新聲明了一次?
*****************************************************
答:
首先,這裡定義的kk的值跟你想的一樣:是 789,另外這裡同樣出現了上面“第一”裡面的語法錯誤。
第三:
<script language="javascript">
var
kk="123";
ss="789";
document.write (kk+'<br>'+ss);
</script>
如果我把var單獨寫一行,這樣kk和ss能不能算是聲明過了?
*****************************************************
答:
不錯,完全和你的想法一樣,這裡同時聲明了kk和ss連個變數;
()...餘下全文>>
javascript中的函式宣告
第一個標準的函式宣告
第二個和第一個差不多,只不過做成匿名函數賦值變數,從語義上來講不同但效果最後一樣,都會在當前上下文產生一個func2的變數名
第三個我很少這樣用,但是應該也可以的,實際上等於var func3,func4; func3 = func4 = function(){}
第四個是使用Function建構函式,這個建構函式使用字串構建函數,動態,比如你可以用字串拼接一個函數體出來,如new Function("alert var" + varName + " + var" + varName2)這樣,這種東西在需要高效能執行javascript的時候,來進行先行編譯。javascript模板引擎經常用這種方式