js變量作用域問題

討論一個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語句應盡可能地放在接近函數頂部的地方。這大大地提升了程序代碼的清晰度。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容