* 預(yù)解釋
* 什么是預(yù)解釋
* 關(guān)于預(yù)解釋: 帶var和帶function不同
* 函數(shù)執(zhí)行四階段
* 作用域鏈
* 預(yù)解釋無節(jié)操
* 閉包
* 運算符
* 棧內(nèi)存和堆內(nèi)存
* 堆內(nèi)存和棧內(nèi)存 的銷毀
* this的總結(jié)
* ||或者 &&并且
預(yù)解釋
什么是預(yù)解釋
變量:
1.聲明一個變量 var ? ? ? var 變量名 = 變量值;
2.= ?賦值:將等號右邊的變量值賦值給等號左邊的變量名
3.變量的作用:存儲值和代表值的
1:什么是預(yù)解釋
在當(dāng)前作用域下,在JS代碼執(zhí)行之前,瀏覽器會對帶var和帶function的進行提前聲明或定義
關(guān)于預(yù)解釋: 帶var和帶function不同
1:帶var和帶function不同
1)帶var 只聲明,不定義 var a;告訴瀏覽器有個變量叫做a,關(guān)于a的內(nèi)容不知道
2)帶function 聲明加定義 ?var fn=xxxfff
2:帶var和不帶var的區(qū)別:
1 帶var: ? 1) 在全局環(huán)境下,屬于window的全局屬性 2)帶var會進行預(yù)解釋
2 不帶var: ?1)屬于window的全局屬性 2)不帶var不會進行預(yù)解釋;
3:私有變量有2種:
1)當(dāng)前作用域下,帶var的; ? ? ? ? ? 2)形參;
函數(shù)執(zhí)行四階段
1)形成一個私有作用域
2)形參賦值
3)預(yù)解釋
4)代碼從上到下執(zhí)行
4:函數(shù)返回值出現(xiàn)undefined的情況有兩種
1)沒有寫return
2)寫了return但是沒賦值
作用域鏈
作用域鏈
當(dāng)函數(shù)被調(diào)用的時候,會形成一個私有作用域,我們看該私有作用域下,是否有私有變量A
1)如果有私有變量A,那么該作用域中的A,都是私有變量跟外界沒有任何關(guān)系
2)如果沒有私有變量A,到上級作用域查找,如果沒有繼續(xù)往上找,找到window還沒有的話,報錯
預(yù)解釋無節(jié)操
預(yù)解釋無節(jié)操
1)只對等號左邊帶var的,聲明但是不定義
2)已經(jīng)聲明過的,不會重復(fù)聲明,但是重新賦值
3)在預(yù)解釋階段,函數(shù)的優(yōu)先級大于變量
4)條件判斷語句中,無論條件是否成立,都會進行預(yù)解釋 ?(注意:條件為真,執(zhí)行代碼,條件不成立,輸出的是全局變量)
5)return 后面的語句不會進行預(yù)解釋 ,return下面的語句,雖然不執(zhí)行,但是會進行預(yù)解釋
6)匿名函數(shù)不進行預(yù)解釋
7)自執(zhí)行函數(shù)不會進行預(yù)解釋,只有執(zhí)行到他的時候,聲明+定義+調(diào)用 同步完成
(function (n){ 形參
自執(zhí)行函數(shù)只執(zhí)行一次,傳參一次 ,自執(zhí)行函數(shù)也是匿名函數(shù)
return function(){
}
})(i)實參
obj.fn(); ? ? ? ?obj.fn執(zhí)行的是return后面函數(shù)
執(zhí)行的是return后面的函數(shù)
閉包
閉包
函數(shù)形成一個新的私有作用域保護里面的私有變量不受外界的干擾(外界修改不了私有的,私有的也修改不了外面的),這種保護機制叫做閉包
運算符
運算符
1)+ ?兩邊遇到字符串--》字符串拼接
1+'zfpx' ?"1zfpx"
2)- * / 如果計算不成功--》NaN
1-'zfpx' ?NaN
運算符的優(yōu)先級
1圓括號
2算數(shù)運算符
3邏輯與&&>邏輯或||
4比較運算符 == != === ?!==
5;三元運算符
6;賦值操作
運算符的優(yōu)先級
算數(shù)運算符 大于 比較運算符 大于 邏輯 大于 賦值
棧內(nèi)存和堆內(nèi)存
棧內(nèi)存和堆內(nèi)存
棧內(nèi)存: 提供一個供JS代碼執(zhí)行的環(huán)境(里面可以放輕量級的數(shù)據(jù);基本數(shù)據(jù)類型)
棧內(nèi)存有全局作用域 和私有作用域
堆內(nèi)存:存放引用數(shù)據(jù)類型
對象數(shù)據(jù)類型:鍵值對
函數(shù)數(shù)據(jù)類型:代碼字符串
堆內(nèi)存和棧內(nèi)存 的銷毀
堆內(nèi)存和棧內(nèi)存 的銷毀
1) 堆內(nèi)存;讓占用內(nèi)存地址的變量,指向ary=null; var=[1,3]
2)棧內(nèi)存;全局作用域和私有作用域
在瀏覽器加載完html頁面的時候,全局作用域就形成了;
全局作用域銷毀;關(guān)閉瀏覽器,關(guān)閉當(dāng)前頁面
3)私有作用域
銷毀:在一般情況下,當(dāng)函數(shù)執(zhí)行完成的時候,默認(rèn)會進行銷毀,有兩種特殊情況不銷毀
1)不銷毀:當(dāng)函數(shù)體內(nèi)有東西被外面的變量或其他占用的時候,該函數(shù)不銷毀
2)不立即銷毀 :當(dāng)函數(shù)執(zhí)行完成的時候,會返回一個函數(shù)的定義階段,這個返回的函數(shù)還需要再次調(diào)用,只有等所有的函數(shù)都調(diào)用完成,這個大函數(shù)才能銷毀
this的總結(jié)
this的總結(jié)
1)當(dāng)元素身上的事件被觸發(fā)的時候,會執(zhí)行一個函數(shù),函數(shù)中的this;指向當(dāng)前這個元素
2)函數(shù)被調(diào)用的時候,看前面是否有..點前面是誰,this就是誰--沒點就是window
3)自執(zhí)行函數(shù)中的this,永遠(yuǎn)都是window ?定時器種的this一般默認(rèn)為window (自執(zhí)行函數(shù)就是匿名函數(shù))
4)回調(diào)函數(shù)中的this一般默認(rèn)為window
5)構(gòu)造函數(shù)中的this 永遠(yuǎn)是實例
6)當(dāng)遇到apply,bind,call的時候,以上統(tǒng)統(tǒng)失效
||或者 &&并且
12:||或者 &&并且
|| ?或者 只要有一個真 整體即為真
&& 并且 兩邊的小條件都為真,整體即為真
先算且&& ?再算或||
- 1.且和或的用法:
+ &&:前面為真,才會走后面;
+ cb && cb();
+ ||:前面為假,才會走后面;
+ var l=left||200;
+ ?&&如果兩邊為具體的值:(為假的值:0 '' null NaN undefined)
如果第一個為真 返回第二個
如果第一個為假 返回第一個
+ ?||如果兩邊為具體的值:(為假的值:0 '' null NaN undefined)
如果第一個為真 返回第一個
如果第一個為假 返回第二個
+ && ||如果兩邊為條件 ?返回false 或者true