邏輯運算符
undefined, null, NaN, "", 0, false這六個值轉(zhuǎn)成布爾值均為false
&&(與)
&&
從第一個表達式依次往后看, 如果遇到的表達式轉(zhuǎn)成布爾值為false
, 則暫停, 將該表達式的值返回; 如果從頭到尾轉(zhuǎn)成布爾值均為true
, 則將最后一個表達式的值返回
let a = 1 && 2
console.log(a) // 2
let a = 1 && ""
console.log(a) // ""
let a = 0 && ""
console.log(a) // 0
let a = 2 && "" && 4
console.log(a) // ""
....
||(或)
||
從第一個表達式依次往后看, 如果遇到的表達式轉(zhuǎn)成布爾值為true
, 則暫停, 將該表達式的值返回; 如果從頭到尾轉(zhuǎn)成布爾值均為false
, 則將最后一個表達式的值返回
let a = 1 || 2
console.log(a) // 1
let a = 0 || 1
console.log(a) // 1
let a = 0 || ""
console.log(a) // ""
let a = 1 || "" || null
console.log(a) // 1
let a = 0 || 2 || null
console.log(a) // 2
!(非)
!
將表達式先轉(zhuǎn)換成布爾值再取反
函數(shù)預(yù)編譯四部曲
- 創(chuàng)建 AO 對象 Activation Object(執(zhí)行期上下文娃闲,作用是理解的作用域俯逾,函數(shù)產(chǎn)生
的執(zhí)行空間庫) - 找形參和變量聲明嚼吞,將變量和形參名作為 AO 屬性名,值為 undefined
相當于 AO{
a : undefined,
b : undefined
}
- 將實參值和形參統(tǒng)一(把實參值傳到形參里)
- 在函數(shù)體里面找函數(shù)聲明刽严,值賦予函數(shù)體
(先看自己的 AO昂灵,再看全局的 GO
作用域
function a (){
function b (){
var bb = 234;
aa = 0;
}
var aa = 123;
b();
console.log(aa)
}
var glob = 100;
a();
image.png
image.png
image.png
image.png
閉包的作用
- 實現(xiàn)公有變量
- 可以做緩存(存儲結(jié)構(gòu))
- 可以實現(xiàn)封裝, 屬性私有化
- 模塊化開發(fā), 防止污染全局變量