寫這個系列為了全面積累鞏固自己的js基礎,包括一些基礎的和稍微冷門、深入的,還有一些面試題,如果你也認為基礎知識很重要,快來一起交流學習啦~ ^ - ^
理解預編譯以後對找bug很有用!!!
函式體裡面的預編譯—發生在函式執行的前一刻
1) 暗示全域性物件 :變數未經宣告就賦值,此變數就為全域性物件(即window物件)所有
2)預編譯過程a =
10console.
log(a)
//10
console.
log(window.a)
//10 這與上一句等價
1.建立區域性ao物件(activation object)/全域性go物件,他們相當於乙個即執行期上下文,前者是函式內的,後者是window全域性的
2.找形參和變數宣告,將變數和形參名作為ao/go屬性名,值為undefined,如果有重複就只寫乙個
3.將實參值和形參統一
4.找函式宣告,賦值給ao裡對應名字的屬性
栗子(你一定可以看懂):
編譯過程 步驟var a =5;
function
test
(a) console.
log(b)
}test(1
);
過程**
1建立全域性與區域性上下文go
go ao
2找形參和變數宣告
go ao
3將實參和形參相統一
go ao
4找函式宣告,新增/替換對應內容
go ao }
執行過程
執行過程按**順序執行,因此請將以下**注釋對應上面編譯過程來看
特點: 先執行的函式最後返回結果var a =5;
//將go裡的a改為5
function
test
(a)//編譯時已看過,忽略
console.
log(b)
;//輸出ao裡的b,值為2
}test(1
);
要點:
例如:n的階乘
筆試題(用友)function
mul(n)
return n*
mul(n-1)
;}
1.求輸出結果
結果:function
test()
test()
;
undefined
2報錯,hello is not defined
編譯過程 步驟
過程**
1建立區域性上下文aoao2
找形參和變數宣告ao3
將實參和形參相統一ao4
找函式宣告,新增/替換對應內容
go ao
因此第乙個輸出時,foo為undefined;第二個輸出時,foo已經有值了,輸出2,第三個hello未定義,會報錯,面試時最好把報錯資訊也寫上
輸出1function
print()
()
編譯過程 步驟
過程**
1建立區域性上下文aoao2
找形參和變數宣告ao3
將實參和形參相統一ao4
找函式宣告,新增/替換對應內容
ao第三行test()執行時test已經被賦值為乙個函式了,因此可以輸出1
原生js底層基礎(四)函式 arguments
寫這個系列為了全面積累鞏固自己的js基礎,包括一些基礎的和稍微冷門 深入的,還有一些面試題,如果你也認為基礎知識很重要,快來一起交流學習啦 1 命名函式表示式var test function abc 執行函式時,test 才有效,abc 無效,因此這個function右邊的abc沒有什麼實際意義 ...
原生JS基礎知識(五)
我的github 函式封裝 減少 耦合 抽象規則 引數 引數js形參和實參天生不定參 function test 1 a,b,c test 1 1,2 實參列表arguments 類陣列 function test 2 a,b,c console.log arguments.length 4 tes...
原生js基礎
js常見資料型別 數字型別 字串 布林 陣列 型別轉換 number 資料 元資料是什麼格式就轉換成什麼格式的數字 parsefloat 資料 將資料轉換成帶小數點的數字 parseint 資料 將資料轉換成整數 字串 string 容器型資料型別,不可變有序 表示 使用 或 模板字串用 轉義字元 ...