摘要:變量聲明提前看代碼以上代碼報錯,這很好理解根本就沒聲明當然報錯啦,往下看以上代碼對于解釋器來說是下面這樣的,所以沒有報錯,且輸出了再來看一中情況原因如下對于解釋器來代碼是這樣的向上首先找到局部變量函數提前以上代碼中函數不只是聲明提前了而是整
1、變量聲明提前:
看代碼
(function(){ function add(){ alert(a); } })() /* 以上代碼報錯:ReferenceError: a is not defined, * 這很好理解 根本就沒聲明當然報錯啦,往下看: */ (function(){ function add(){ alert(a); // output:undefined; var a = "bcd"; alert(a); // output:bcd; } })() //以上代碼對于解釋器來說是下面這樣的,所以沒有報錯,且輸出了undefined; (function(){ function add(){ var a; // eq: var a = undefined; alert(a); // output:undefined; a = "bcd"; alert(a); // output:bcd; } })() //再來看一中情況: (function(){ var a = "wer"; function add(){ alert(a); // output:undefined; var a = "bcd"; alert(a); // output:bcd; } })() /* *原因如下:對于解釋器來代碼是這樣的 */ (function(){ var a = "wer"; function add(){ var a; // eq:var a = undefined; alert(a); // 向上首先找到局部變量a, a = "bcd"; alert(a); } })()
2、函數提前:
(function(){ alert(add(1, 3)); // output:4, function add(x, y){ return x + y; } }) // 以上代碼中函數add 不只是聲明提前了而是整個add函數的定義都被提前了 //另一種情況: (function(){ alert(add(1, 3)); //TypeError: add is not a function var add = function(x, y){ return x + y; } })() //對于編譯器來說代碼如下: (function(){ var add; alert(add(1, 3)); //所以TypeError add = function(x, y){ return x + y; } })()
**總結:** 1、變量的聲明被提前到作用域頂部,賦值保留在原地 2、函數聲明整個“被提前” 3、函數作為值賦給變量時只有變量“被提前”了,函數沒有“被提前”
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79817.html
摘要:但是變量只有其聲明被提前在作用域的最開始處,賦值結果仍然還在原來位置。 這篇博文是之前在CSDN寫的,現在移至sf。 有過C或者Java類編程經驗的同學,對于先聲明后使用的規則很熟悉,如果使用未聲明的變量或者函數,編譯時程序會報錯!但是,JavaScript卻是一個‘大奇葩’,可以在變量或者函數聲明之前使用,現在根據我的理解在做一下說明。 首先說明JS的hoist分為變量hoist和函...
摘要:而外層的函數不能訪問內層的變量或函數,這樣的層層嵌套就形成了作用域鏈。閉包閉包是指有權訪問另一個函數作用域中的變量的函數,創建閉包的最常見的方式就是在一個函數內創建另一個函數,通過另一個函數訪問這個函數的局部變量。 閉包是js中一個極為NB的武器,但也不折不扣的成了初學者的難點。因為學好閉包就要學好作用域,正確理解作用域鏈,然而想做到這一點就要深入的理解函數,所以我們從函數說起。 函數...
摘要:四這個題目比較簡單即函數聲明和變量聲明的關系和影響,遇到同名的函數聲明,不會重新定義五關于這個題目,的規范有解釋的。屬性的值是對象關于對象的具體定義,看這里對象六這個題目可以說是最簡單的,也是最詭異的關于這個題目,我們先來了解個概念。 廢話不多說,直接看題目,先不要急著看答案 先自己思考,收獲更多 (長期補倉); 一 var out = 25, inner = { ...
摘要:作用域執行上下文變量提前函數聲明提前確定值范圍一段或者一個函數都會生成一個執行上下文全局一段變量定義函數聲明函數變量定義函數聲明參數集合變量提前代碼解析執行過程變量定義提前賦值函數聲明提前代碼解析函數聲明函數表達式執行過程執行過程執行時才能 1.作用域 執行上下文 (變量提前、函數聲明提前、確定this值、arguments) 范圍:一段或者一個函數(都會生成一個執行上下文) ...
摘要:構造函數調用會使用新創建的對象作為調用上下文。函數的參數相關可選形參當傳入的實參比函數聲明時指定的形參數量要少,剩下的形參都將設置為值實參多則會自動省略。它們的第一個實參是要調用函數的母對象,它是調用上下文,函數體內通過引用它。 寫在前面 注:這個系列是本人對js知識的一些梳理,其中不少內容來自書籍:Javascript高級程序設計第三版和JavaScript權威指南第六版,感謝它們的...
閱讀 1075·2021-09-29 09:35
閱讀 4621·2021-09-22 15:24
閱讀 1449·2021-07-25 21:37
閱讀 2178·2019-08-30 14:17
閱讀 965·2019-08-30 13:56
閱讀 2411·2019-08-29 17:07
閱讀 1251·2019-08-29 12:44
閱讀 2705·2019-08-26 18:26