成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

JS 作用域 閉包 this 原型 知識(shí)點(diǎn)總結(jié)

warnerwu / 1607人閱讀

摘要:如果你能看懂以下兩張圖那就可以跳過本總結(jié)了當(dāng)然點(diǎn)個(gè)贊再走啊喂啊喂分割線你不知道的上冊(cè)作用域和閉包和查詢可以理解為查找變量賦值的目標(biāo)和源頭當(dāng)然賦值可以是隱晦的查詢失敗將在嚴(yán)格模式下導(dǎo)致拋出非嚴(yán)格模式下則會(huì)自動(dòng)創(chuàng)建新變量額分別是修改原有作用域和

如果你能看懂以下兩張圖, 那就可以跳過本總結(jié)了, 當(dāng)然, 點(diǎn)個(gè)贊再走啊喂! (#`O′)!


啊喂分割線 (#`O′)! (#`O′)! (#`O′)! (#`O′)! (#`O′)! (#`O′)! (#`O′)! (#`O′)! (#`O′)! 
你不知道的JavaScript(上冊(cè)) 作用域和閉包

LHS和RHS查詢, 可以理解為查找變量賦值的目標(biāo)和源頭, 當(dāng)然, "賦值"可以是隱晦的

LHS查詢失敗, 將在嚴(yán)格模式下導(dǎo)致拋出RefrenceError, 非嚴(yán)格模式下則會(huì)自動(dòng)創(chuàng)建新變量

eval額with分別是修改原有作用域和根據(jù)參數(shù)創(chuàng)建一個(gè)新的作用域

我們?nèi)绻押瘮?shù)理解成代碼片段之間的接口?

for循環(huán)中的var會(huì)污染上級(jí)作用域 -> var會(huì)污染上級(jí)作用域 -> js(es5)沒有塊級(jí)作用域? -> 通過IIFE可以偽裝一個(gè)塊級(jí)作用域(但這種方法并不普適), 其實(shí)with和catch可以創(chuàng)建一個(gè)塊級(jí)作用域 -> js(es5)有塊級(jí)作用域, 更別說es6了

某個(gè)函數(shù)擁有上級(jí)(或上多級(jí))作用域的引用, 就叫做閉包, 詳細(xì)一點(diǎn)說明就是: 當(dāng)函數(shù)記住并訪問其所在的詞法作用域, 即便它是在當(dāng)前詞法作用域之外執(zhí)行, 這就產(chǎn)生了閉包. 閉包可以使得函數(shù)就訪問定義時(shí)的詞法作用域, 實(shí)際上只要使用了回調(diào)函數(shù)就使用了閉包

模塊的兩個(gè)主要特征: 為創(chuàng)建內(nèi)部作用域而封裝了包裝函數(shù); 包裝函數(shù)的返回值必須包括一個(gè)內(nèi)部函數(shù)的引用;

JS只有詞法作用域(定義在書寫代碼使得作用域, 當(dāng)然排除eval和with)

詞法作用域關(guān)注函數(shù)在何處聲名, 動(dòng)態(tài)作用域關(guān)注函數(shù)在何處調(diào)用

bind函數(shù)經(jīng)常用于替代匿名的箭頭函數(shù), 以創(chuàng)建具名函數(shù)

this和對(duì)象原型

想比較于顯式傳入上下文對(duì)象, this關(guān)鍵字使用了一種更佳優(yōu)雅的方式, 傳遞一個(gè)對(duì)象的引用

this不指向(或不僅僅指向)函數(shù)本身或者函數(shù)的作用域, 他是在函數(shù)創(chuàng)建(調(diào)用)時(shí)被綁定的

在非嚴(yán)格模式中, 直接調(diào)用函數(shù), 通常會(huì)自動(dòng)將this綁定到全局對(duì)象, 稱之默認(rèn)綁定

隱式綁定即判斷調(diào)用函數(shù)時(shí)的上下文對(duì)象, 如 obj.say(), 將say中的this隱式綁定到obj

顯式綁定即call, apply, 其中一種特殊的形式叫做硬綁定, bind

使用new將會(huì)發(fā)生如下步驟: 創(chuàng)建新對(duì)象, 設(shè)置__proto__為函數(shù)的prototype, 綁定this到新對(duì)象, 默認(rèn)返回這個(gè)新對(duì)象(最后這一點(diǎn)常被認(rèn)為是new的一個(gè)副作用)

給bing, call等函數(shù)傳入null, undefined將出乎意料的導(dǎo)致this綁定到全局對(duì)象, 更安全的解決辦法是使用一個(gè)空對(duì)象, 如Object.create(null)

JS中基本類型本身不是對(duì)象, 只是創(chuàng)建時(shí)字面量會(huì)自動(dòng)被轉(zhuǎn)化為對(duì)象, typeof null === "object" 的結(jié)果是bug

對(duì)象鍵訪問會(huì)將其中的值轉(zhuǎn)化為字符串, 就算是數(shù)字也不例外, 然而數(shù)組反之

通過遍歷對(duì)象屬性進(jìn)行freeze可以模擬"深度凍結(jié)", 但是可能在無意中凍結(jié)其它(共享)對(duì)象

hasOwnProperty只檢查自身屬性, 而in操作符會(huì)搜索至原型鏈

4 in [1,2,4] 可能不會(huì)得到你想要的結(jié)果 --- 答案是false, 因?yàn)閕n操作符檢查的是屬性名

類/繼承描述了代碼的一種組織結(jié)構(gòu)方式->軟件對(duì)真實(shí)世界問題領(lǐng)域的建模方法

多態(tài)指父類的通用行為可以被子類用更特殊的行為重寫

JS中利用顯示偽多態(tài)(Car子類調(diào)用Vehicle.drive.call(this)), 將極大增加維護(hù)成本, 代碼復(fù)雜度, 應(yīng)盡量避免使用, 或者改為將父類方法保存到子類中

總的來說, 在JS中模擬類是得不償失的

屬性的屏蔽比想象中的要復(fù)雜, 如果底層對(duì)象沒有該屬性, 則上層對(duì)象的屬性的writable:false或是其作為setter存在, 會(huì)對(duì)賦值(=)操作有影響, 當(dāng)然你可以使用defineProperty來解除這種影響. 這里有個(gè)坑, 如a.b++其實(shí)相當(dāng)于a.b=a.b+1

繼承意味著"復(fù)制操作", JS中通過prototype實(shí)現(xiàn)的繼承, 將只是創(chuàng)建對(duì)象之間的關(guān)聯(lián), 而不是復(fù)制操作

JS中"構(gòu)造函數(shù)"的概念僅存在于使用new操作符時(shí), new將普通函數(shù)劫持, 將調(diào)用變成有返回值的"構(gòu)造函數(shù)調(diào)用"

JS中.constructor屬性與"構(gòu)造"毫無關(guān)系, 把他當(dāng)成一個(gè)普通的屬性理解就好

JS原型繼承(B.prototype= Object.create(A.prototype))可以類比為"類的繼承"

Object.create修改[[Prototype]]以修改對(duì)象之間的連接關(guān)系, 這和new是一樣的, 但是, new還會(huì)通過Base.call(newObj)做一些其他事

空的對(duì)象(__proto__==null)叫做"字典", 因?yàn)闆]有任何委托, 所以適合用來儲(chǔ)存數(shù)據(jù)

總的來說, 用"委托"來描述JS對(duì)象之間的關(guān)聯(lián)關(guān)系(OLOO)更合適(而不是"復(fù)制")

類風(fēng)格代碼(Function,new或是ES6的Class)強(qiáng)調(diào)實(shí)體和實(shí)體的關(guān)系, OLOO則只關(guān)注對(duì)象關(guān)聯(lián)關(guān)系, 這里有兩張圖太棒了, 可惜放不出來

鴨子類型(if(a.b)a.b())有時(shí)比instanceof有效

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/93210.html

相關(guān)文章

  • 變量類型、原型、閉包、作用面試題及識(shí)點(diǎn)簡單總結(jié)

    摘要:值類型是將變量的值存在內(nèi)存中。說明幾種不同的使用場景作為構(gòu)造函數(shù)對(duì)象屬性普通函數(shù)執(zhí)行,創(chuàng)建個(gè)標(biāo)簽,點(diǎn)擊時(shí)彈出對(duì)應(yīng)序號(hào)如何理解作用域自由變量作用域鏈,即自由變量的尋找閉包的兩個(gè)場景。 變量類型和計(jì)算知識(shí)點(diǎn): 值類型、引用類型 //值類型 var a=100 var b=a a=200 console.log(b) //100 //引用類型 var a={age:20} var b=a b...

    mj 評(píng)論0 收藏0
  • 面試識(shí)點(diǎn)總結(jié)

    摘要:最近面試幾家前端職位,想知道目前的前端面試題是偏向哪一塊,都主要問到的是語法,閉包,原型鏈,繼承那一塊。并且將面試題的知識(shí)點(diǎn)匯總一下。參考網(wǎng)站面試題圖片過多的時(shí)候如何優(yōu)化圖標(biāo)很多的時(shí)候可以用雪碧圖圖片過大時(shí)候可以壓縮一下。 最近面試幾家前端職位,想知道目前的前端面試題是偏向哪一塊,都主要問到的是ES6語法,閉包,原型鏈,繼承那一塊。并且將面試題的知識(shí)點(diǎn)匯總一下。有助于下次面試。 1.H...

    王晗 評(píng)論0 收藏0
  • 面試識(shí)點(diǎn)總結(jié)

    摘要:最近面試幾家前端職位,想知道目前的前端面試題是偏向哪一塊,都主要問到的是語法,閉包,原型鏈,繼承那一塊。并且將面試題的知識(shí)點(diǎn)匯總一下。參考網(wǎng)站面試題圖片過多的時(shí)候如何優(yōu)化圖標(biāo)很多的時(shí)候可以用雪碧圖圖片過大時(shí)候可以壓縮一下。 最近面試幾家前端職位,想知道目前的前端面試題是偏向哪一塊,都主要問到的是ES6語法,閉包,原型鏈,繼承那一塊。并且將面試題的知識(shí)點(diǎn)匯總一下。有助于下次面試。 1.H...

    CrazyCodes 評(píng)論0 收藏0
  • JS篇」你不知道的 JS 識(shí)點(diǎn)總結(jié)(一)

    摘要:調(diào)用棧就是為了到達(dá)當(dāng)前執(zhí)行位置所調(diào)用到的所用函數(shù)。方法測試是否至少有一個(gè)元素通過由提供的函數(shù)實(shí)現(xiàn)的測試返回值是終止。然而,如果存在于原型鏈上層,賦值語句的行為就會(huì)有些不同而且可能很出人意料。 typeof null 為 object 解釋 不同的對(duì)象在底層都表示為二進(jìn)制,在JavaScript中二進(jìn)制前三位都為0的話會(huì)被判斷為object類型,null 的二進(jìn)制表示都是0,自然前三位都...

    JouyPub 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<