討論一個js變量作用域的問題
<script type="text/javascript">
var myvar = "my value";
(function(){
console.log(myvar);
var myvar = "local value";
})()
</script>
不論是var myvar = "my value";
還是myvar = "my value";
輸出的結果都是undefined,內部定義了var myvar,但是因為沒有賦值所以為undefined。這個和把它注釋掉是一樣的。
如果改為
<script type="text/javascript">
var myvar = "my value";
(function (){
console.log(myvar);
myvar = "local value";
})()
</script>
就會出現奇妙的事情了,可以看到輸出結果為my value,因為將myvar定義為了全局變量,這樣先賦值的my value就成為了輸出結果。
所以綜上,為了簡單,由于存在變量聲明提升,一個函數中所有的var語句應盡可能地放在接近函數頂部的地方。這大大地提升了程序代碼的清晰度。