亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

《你不知道的JavaScript》 (上) 閱讀摘要

FingerLiu / 2190人閱讀

摘要:但是如果非全局的變量如果被遮蔽了,無(wú)論如何都無(wú)法被訪(fǎng)問(wèn)到。但是如果引擎在代碼中找到,就會(huì)完全不做任何優(yōu)化。結(jié)構(gòu)的分句中具有塊級(jí)作用域。第四章提升編譯器函數(shù)聲明會(huì)被提升,而函數(shù)表達(dá)式不會(huì)被提升。

本書(shū)屬于基礎(chǔ)類(lèi)書(shū)籍,會(huì)有比較多的基礎(chǔ)知識(shí),所以這里僅記錄平常不怎么容易注意到的知識(shí)點(diǎn),不會(huì)全記,供大家和自己翻閱;

上中下三本的讀書(shū)筆記:

《你不知道的JavaScript》 (上) 讀書(shū)筆記

《你不知道的JavaScript》 (中) 讀書(shū)筆記

《你不知道的JavaScript》 (下) 讀書(shū)筆記

第一部分 作用域和閉包 第二章 詞法作用域 詞法查找

全局變量會(huì)自動(dòng)成為全局對(duì)象(瀏覽器中是 window) 的屬性,因此是不可以直接通過(guò)全局對(duì)象的此法名稱(chēng),而是間接地通過(guò)全局對(duì)象屬性的應(yīng)用來(lái)對(duì)其進(jìn)行訪(fǎng)問(wèn) window.a,通過(guò)這種方法可以訪(fǎng)問(wèn)那些被同名變量所遮蔽的全局變量。但是如果非全局的變量如果被遮蔽了,無(wú)論如何都無(wú)法被訪(fǎng)問(wèn)到。

欺騙詞法

如果詞法作用域完全由寫(xiě)代碼期間函數(shù)所生命的位置來(lái)定義,那么可以通過(guò)幾種方法來(lái)欺騙(修改)詞法作用域,比如 eval、with 但是要注意:欺騙詞法作用域會(huì)導(dǎo)致性能下降。

因?yàn)镴S引擎會(huì)在編譯階段進(jìn)行性能優(yōu)化,其中有些優(yōu)化依賴(lài)于能夠根據(jù)代碼的詞法進(jìn)行靜態(tài)分析,并預(yù)先確定所有變量和函數(shù)的定義位置,才能在執(zhí)行過(guò)程中快速找到標(biāo)識(shí)符。但是如果引擎在代碼中找到 evalwith ,就會(huì)完全不做任何優(yōu)化。

第三章 函數(shù)作用域和塊作用域 函數(shù)作用域

包裝函數(shù)的聲明以 function 關(guān)鍵字開(kāi)始,那么就是函數(shù)聲明,而下面這個(gè)例子是以 (function 開(kāi)始,那么就是函數(shù)表達(dá)式:

const a = 1;
 
function foo() {        // 函數(shù)聲明
  const a = 4;
  console.log(a);
}
 
(function foo() {        // 函數(shù)表達(dá)式
  const a = 3;
  console.log(a);
}())
console.log(a);

所以上面的 IIFE 將會(huì)被當(dāng)做函數(shù)表達(dá)式而不是一個(gè)函數(shù)聲明來(lái)處理;

函數(shù)聲明函數(shù)表達(dá)式之間最重要的區(qū)別是他們的名稱(chēng)標(biāo)識(shí)符會(huì)綁定在何處。

函數(shù)聲明的名稱(chēng)標(biāo)識(shí)符 foo 會(huì)被綁定在所在作用域中,可以直接通過(guò) foo() 來(lái)調(diào)用;而函數(shù)表達(dá)式的 foo 被綁定在函數(shù)表達(dá)式只剩的函數(shù)中而不是所在作用域中;

同時(shí),即使是具名的函數(shù)表達(dá)式,名稱(chēng)標(biāo)識(shí)符在賦值之前也無(wú)法在所在作用域中使用。

try/catch 結(jié)構(gòu)的 catch 分句中具有塊級(jí)作用域。

第四章 提升 編譯器

函數(shù)聲明會(huì)被提升,而函數(shù)表達(dá)式不會(huì)被提升。

函數(shù)優(yōu)先

函數(shù)聲明和變量聲明都會(huì)被提升,但是函數(shù)會(huì)首先被提升,然后才是變量。

foo()        // 1
var foo
 
function foo() {
  console.log(1)
}
 
foo = function() {
  console.log(2)
}

函數(shù)聲明 foo 會(huì)首先被提升,然后打印出 1,后面的 var 聲明會(huì)被認(rèn)為是重復(fù)聲明而被忽略;但是注意如果后面出現(xiàn)同名函數(shù)聲明,則會(huì)覆蓋前面的:

foo()        // 2
function foo() { console.log(1) }
function foo() { console.log(2) }
第二部分 this和對(duì)象原型 第一章 關(guān)于this this到底是什么

this 實(shí)際上是在函數(shù)被調(diào)用時(shí)發(fā)生的綁定,它指向什么完全取決于函數(shù)在哪里被調(diào)用,并不是在編寫(xiě)時(shí)綁定。當(dāng)一個(gè)函數(shù)被調(diào)用時(shí),會(huì)創(chuàng)建一個(gè)執(zhí)行上下文,它包含函數(shù)在哪里被調(diào)用(調(diào)用棧)、函數(shù)的調(diào)用方式、傳入的參數(shù)等信息,this 就是這個(gè)記錄的一個(gè)屬性,會(huì)在函數(shù)執(zhí)行的過(guò)程中用到。

判斷this

我們可以根據(jù)優(yōu)先級(jí)來(lái)判斷 this

new 綁定: 函數(shù)是否是在 new 中調(diào)用,如果是的話(huà), this 綁定的是新創(chuàng)建的對(duì)象;

var bar = new foo()

顯式綁定: 函數(shù)是否通過(guò) callapply 或者硬綁定調(diào)用,如果是的話(huà),this 綁定的是指定的對(duì)象;

var bar = foo.call(obj)

隱式綁定: 函數(shù)是否在某個(gè)上下文對(duì)象中調(diào)用,如果是的話(huà) this 綁定的是那個(gè)上下文對(duì)象;

var bar = obj.foo()

默認(rèn)綁定: 如果都不是的話(huà),在嚴(yán)格模式下綁定到 undefined ,非嚴(yán)格模式綁定到全局對(duì)象;

var bar = foo()

例外

被忽略的情況: 比如把 null、undefined 作為 this 的綁定對(duì)象傳入 callapplybind ,那么這些值在調(diào)用時(shí)會(huì)被忽略,實(shí)際應(yīng)用的是默認(rèn)綁定;

箭頭函數(shù): 箭頭函數(shù)根據(jù)外層作用域來(lái)決定 this,且箭頭函數(shù)的綁定無(wú)法被修改,new 也不可以;

PS:歡迎大家關(guān)注我的公眾號(hào)【前端下午茶】,一起加油吧~

另外可以加入「前端下午茶交流群」微信群,長(zhǎng)按識(shí)別下面二維碼即可加我好友,備注加群,我拉你入群~

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/100836.html

相關(guān)文章

  • 你不知道JavaScript》 (下) 閱讀摘要

    摘要:本書(shū)屬于基礎(chǔ)類(lèi)書(shū)籍,會(huì)有比較多的基礎(chǔ)知識(shí),所以這里僅記錄平常不怎么容易注意到的知識(shí)點(diǎn),不會(huì)全記,供大家和自己翻閱不錯(cuò),下冊(cè)的知識(shí)點(diǎn)就這么少,非常不推介看下冊(cè)上中下三本的讀書(shū)筆記你不知道的上讀書(shū)筆記你不知道的中讀書(shū)筆記你不知道的下讀書(shū)筆記第三 本書(shū)屬于基礎(chǔ)類(lèi)書(shū)籍,會(huì)有比較多的基礎(chǔ)知識(shí),所以這里僅記錄平常不怎么容易注意到的知識(shí)點(diǎn),不會(huì)全記,供大家和自己翻閱; 不錯(cuò),下冊(cè)的知識(shí)點(diǎn)就這么少,非...

    Jacendfeng 評(píng)論0 收藏0
  • 你不知道JavaScript》 (中) 閱讀摘要

    摘要:這時(shí)候控制臺(tái)看到的是對(duì)象的快照,然而點(diǎn)開(kāi)看詳情的話(huà)是這段代碼在運(yùn)行的時(shí)候,瀏覽器可能會(huì)認(rèn)為需要把控制臺(tái)延遲到后臺(tái),這種情況下,等到瀏覽器控制臺(tái)輸出對(duì)象內(nèi)容時(shí),可能已經(jīng)運(yùn)行,因此會(huì)在點(diǎn)開(kāi)的時(shí)候顯示,這是的異步化造成的。 本書(shū)屬于基礎(chǔ)類(lèi)書(shū)籍,會(huì)有比較多的基礎(chǔ)知識(shí),所以這里僅記錄平常不怎么容易注意到的知識(shí)點(diǎn),不會(huì)全記,供大家和自己翻閱; 上中下三本的讀書(shū)筆記: 《你不知道的JavaScri...

    stackvoid 評(píng)論0 收藏0
  • 2017年 最好javascript 書(shū)籍

    摘要:請(qǐng)記住,這些書(shū)中的一些可能不是最新的,但概念和基礎(chǔ)仍應(yīng)適用。是最好的老師之一。的秘密由部分組成。在你完成這些書(shū)后,查看書(shū)籍和最好的本土?xí)? 我看過(guò)三本,第1本,第二本,第四本。第一本買(mǎi)的的實(shí)體書(shū),其他兩本看的是電子書(shū)。第一本是大名鼎鼎老道寫(xiě)的,書(shū)很薄,但是非常經(jīng)典。javascirpt忍者秘籍是jquery的作者寫(xiě)的,也是非常經(jīng)典。you dont kown js系列也是非常好。看了...

    mingzhong 評(píng)論0 收藏0
  • H5 知識(shí)點(diǎn) - 收藏集 - 掘金

    摘要:目錄不要過(guò)度依賴(lài)一前端掘金毫無(wú)疑問(wèn),是一款非常優(yōu)秀的庫(kù),它讓我們開(kāi)發(fā)項(xiàng)目變得更加便捷容易。但是作為一個(gè)前端工作者,我們肯定也希望在我們的網(wǎng)頁(yè)里也能看到這么酷分鐘搞定常用基礎(chǔ)知識(shí)前端掘金基礎(chǔ)智商劃重點(diǎn)在實(shí)際開(kāi)發(fā)中,已經(jīng)非常普及了。 跨域解決方案總結(jié) - 前端 - 掘金為什么需要跨域? 就得先知道同源策略. 同源策略 同源策略是為了保證數(shù)據(jù)的安全性,一個(gè)域的腳本不能去操作另外一個(gè)域的腳本的...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<