局部變量的作用域變大了,大到函數

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script type="text/javascript">
    function test() {
        //undefined escape from for{}
        alert(j);
        for (var i = 0; i < 3; i++) {
            var j = 1;
        }
        //escape from for{}
        alert(j);
    }
    //變量作用域,j可以逃出for{},但逃不出function
    //其他語言中,j連for{}都逃不出
    test();
    // not defined 直接報錯
    alert(j);
</script>
</body>
</html>

普通對象:鍵值對的一個集合
函數對象:鍵值對的一個集合
可執行
帶兩個隱藏的屬性(函數上下文\函數代碼)

關于參數

arguments本身并不是JS的數組對象.雖然它有length屬性,并可以用索引下標訪問每個元素,但是它沒有JS數組對象那么多方法(如slice concat).若想在arguments上使用JS數組對象的方法,需要借用數組的方法:
var newArgs=Array.prototype.slice.apply(arguments);
這時候返回的newArgs就是slice增強版arguments
apply()對參數對象進行增強并返回新的參數對象

第一次alert(j)這個時候js已經感知到j的定義,但j沒有賦值,所以是undefined
可以認為function把所有的var聲明提前到靠近function的開始位置
第二次alert(j)已經賦值了
第三次alert(j)是在function外,局部變量是逃不出function的,所以報錯
其次,i和j的作用域是一樣的

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

推薦閱讀更多精彩內容

  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,265評論 0 4
  • 第一章: JS簡介 從當初簡單的語言,變成了現在能夠處理復雜計算和交互,擁有閉包、匿名函數, 甚至元編程等...
    LaBaby_閱讀 1,689評論 0 6
  • 工廠模式類似于現實生活中的工廠可以產生大量相似的商品,去做同樣的事情,實現同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,808評論 2 17
  • title: js面向對象date: 2017年8月17日 18:58:05updated: 2017年8月27日...
    lu900618閱讀 580評論 0 2
  • 第一部分 準入訓練 第1章 進入忍者世界 js開發人員通常使用js庫來實現通用和可重用的功能。這些庫需要簡單易用,...
    如201608閱讀 1,365評論 1 2