国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端進(jìn)化筆記-JavaScript(三)

這篇具有很好參考價(jià)值的文章主要介紹了前端進(jìn)化筆記-JavaScript(三)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

人類在白色的底色上描繪圖畫,地球在黑色的底色上創(chuàng)造生命。


變量、作用域與內(nèi)存

JavaScript的變量可以說是獨(dú)樹一幟。只需要一個(gè)(或兩個(gè)等)關(guān)鍵字(const,let)就可以創(chuàng)建變量,創(chuàng)建時(shí)不考慮變量的類型,這是其他語言少有的強(qiáng)大功能。當(dāng)然強(qiáng)大的功能總是伴隨著問題。

原始值:Undefined,Null,Boolean,Number,String,Symbol。它們都是按值訪問的,因此我們操作的就是儲(chǔ)存在變量中的實(shí)際值。

引用值:保存在內(nèi)存中的對(duì)象。引用值是按引用訪問的(類似指針),我們操作的實(shí)際上是引用而不是對(duì)象本身。

兩者的不同:

  1. 原始值沒有屬性,引用值有,但如果使用new關(guān)鍵字,就會(huì)為原始值創(chuàng)造對(duì)象,從而使他們可以獲得屬性。(實(shí)際上字符串原始值,即使不用構(gòu)造函數(shù)創(chuàng)建也有l(wèi)ength等屬性和方法。但是想要添加屬性和方法就必須要使用包裝類型對(duì)象)
  2. 原始值在復(fù)制的時(shí)候會(huì)獲得一個(gè)獨(dú)立的副本,而引用值只是復(fù)制了這個(gè)引用,它們指向同一個(gè)對(duì)象。(類似指針那樣理解)

傳遞參數(shù)

ECMAscript中所有的函數(shù)參數(shù)都是按值傳遞的,也就說明函數(shù)內(nèi)的參數(shù)和函數(shù)外的變量沒有什么關(guān)系,只是值的賦值。即使是引用值也只是傳值(雖然他的賦值是傳址的),這里我的理解是傳入指針本身的內(nèi)容而非指向的地址本身。實(shí)際上,函數(shù)內(nèi)部的參數(shù)是一個(gè)局部變量。
下面的例子,可以幫助我們理解這個(gè)問題:

function setName(obj){
  obj.name = 'jake';  //obj這個(gè)"指針"指向的地址(假設(shè)地址為1,則person的地址也為1)的name為jake,則1地址內(nèi)的name被修改
  obj = new Object(); //obj不再指向1,而是指向其他地址(假設(shè)為2),1中的name值obj取不到了
  obj.name = 'james'; //2中的name為james,與1無關(guān),也就與person無關(guān)
}

let person = new Object();
setName(person);
console.log(person.name);//jake
console.log(obj);//obj沒有定義,他在函數(shù)執(zhí)行結(jié)束的時(shí)候就被銷毀了

instance用來確定對(duì)象的類型

上下文與作用域

執(zhí)行上下文

紅寶書中對(duì)于執(zhí)行上下文的解釋并沒有那么深入,我在學(xué)習(xí)的過程中也在網(wǎng)上閱讀了一些相關(guān)文章,對(duì)于JavaScript的執(zhí)行上下文邏輯有了一點(diǎn)淺顯的理解。日后在對(duì)js有更深入了解之后,會(huì)詳細(xì)介紹,現(xiàn)在先簡單說一下我的理解,如果后續(xù)發(fā)現(xiàn)不嚴(yán)謹(jǐn)?shù)牡胤綍?huì)隨時(shí)修改,也歡迎指正。

執(zhí)行上下文本質(zhì)是一個(gè)變量對(duì)象,包含了上下文中定義的所有變量和函數(shù)。JavaScript在運(yùn)行代碼之前,會(huì)對(duì)整個(gè)代碼進(jìn)行一次掃描,進(jìn)行一些配置(提升,配置全局上下文等),在配置全局上下文的時(shí)候,會(huì)將整個(gè)代碼的變量和函數(shù)聲明全部放入其中,但不會(huì)進(jìn)行語句操作(賦值等),同時(shí),全局上下文會(huì)永遠(yuǎn)放在執(zhí)行上下文棧的最底部。在完成這些后,才會(huì)運(yùn)行每一個(gè)語句。當(dāng)代碼執(zhí)行流進(jìn)入函數(shù)時(shí),就會(huì)創(chuàng)建函數(shù)上下文,當(dāng)然它也是個(gè)對(duì)象,它會(huì)將當(dāng)前函數(shù)中的變量和函數(shù)聲明放入其中,同時(shí)它也會(huì)被放入執(zhí)行上下棧中。函數(shù)上下文和全局上下文的一些操作是相通,如果函數(shù)中還有函數(shù),那就是不斷往上下文棧中push的套娃過程。當(dāng)函數(shù)執(zhí)行完畢,它的上下文就會(huì)被銷毀。因此外部無法訪問內(nèi)部的變量,但是內(nèi)部卻可以訪問外部的。

當(dāng)你在函數(shù)內(nèi)部使用變量時(shí),如果它并沒有在該函數(shù)內(nèi)部定義,那么JavaScript引擎會(huì)幫你找該函數(shù)的外層函數(shù),這樣一層層的找下去直到最外層。這和對(duì)象中屬性和方法的搜索機(jī)制很像(一個(gè)是作用域鏈一個(gè)是原型鏈)。作用域鏈就是把上下文棧串了起來,前面的內(nèi)部的(棧上層的)上下文,可以使用后面的外部的(棧下層的)上下文中的一切,反之則不行。

除了上面兩種執(zhí)行上下文外,eval()調(diào)用內(nèi)部存在第三種上下文(在這里就不細(xì)說了)。還有一些語句會(huì)在作用域鏈前端臨時(shí)添加一個(gè)上下文。

  • try/catch語句中的catch塊:在前端創(chuàng)建一個(gè)新的對(duì)象,包含要拋出的錯(cuò)誤對(duì)象聲明
  • with語句:在前端添加指定對(duì)象

作用域

變量如果不使用任何關(guān)鍵字聲明,會(huì)被添加到全局上下文。

  1. var的函數(shù)作用域聲明
    使用var會(huì)將變量自動(dòng)添加到最近的執(zhí)行上下文中。
  2. let的塊級(jí)作用域聲明
    作用域由最近一對(duì)花括號(hào)界定(對(duì)于for循環(huán)等,在循環(huán)條件中l(wèi)et聲明的對(duì)象,{}內(nèi)可以使用)
  3. const的常量聲明(也是塊作用域)
    使用const聲明變量時(shí)必須同時(shí)進(jìn)行初始化。并且此變量不允許修改,但如果變量是對(duì)象,則對(duì)象中的屬性或方法可以修改。這個(gè)特點(diǎn)讓我聯(lián)想到Vue中的props配置,同樣是不允許修改,但是如果props傳遞了對(duì)象,則可以通過v-model對(duì)這個(gè)對(duì)象內(nèi)部進(jìn)行修改。不知道是Vue開發(fā)者留下的問題,還是原生js的const聲明的問題(現(xiàn)在看來關(guān)系不大,雖然兩者看起來還挺像)。
  • 這個(gè)問題今天面試官給我做了部分解釋:不允許修改是因?yàn)榉奖銛?shù)據(jù)的維護(hù),一個(gè)父組件會(huì)有多個(gè)子組件,如果多個(gè)子組件同時(shí)修改數(shù)據(jù)會(huì)導(dǎo)致數(shù)據(jù)紊亂。雖然沒有解釋Vue開發(fā)人員為什么留下一個(gè)小“漏洞”。(這個(gè)問題等我入職的時(shí)候再問(手動(dòng)狗頭))
  • 寫上面這句話的時(shí)候,我又覺得和OS中獨(dú)木橋類問題有些類似。多個(gè)線程走一個(gè)獨(dú)木橋時(shí),必須通過原語保證過橋順序不亂,當(dāng)只有當(dāng)一個(gè)線程放開對(duì)橋的使用時(shí),下一個(gè)線程才可以上橋。這個(gè)方法就實(shí)現(xiàn)了多個(gè)線程過一個(gè)橋的方法。如果組件也可以自由修改props數(shù)據(jù),那就要采取類似方法,保證修改時(shí)沒有其他組件正在使用,也不允許其他組件“插隊(duì)”。

無論JavaScript是否對(duì)變量聲明進(jìn)行提升,都不建議在變量未聲明的時(shí)候就使用變量。

垃圾回收

對(duì)代碼中不再使用的變量進(jìn)行及時(shí)銷毀,釋放其內(nèi)存。其中的關(guān)鍵就是對(duì)于變量的追蹤與標(biāo)記。瀏覽器的發(fā)展史上主要使用過兩種標(biāo)記策略:標(biāo)記清理和引用計(jì)數(shù)

標(biāo)記清理:這也是JavaScript最常用的垃圾回收策略。使用標(biāo)記方法對(duì)不再使用的變量進(jìn)行標(biāo)記。

引用計(jì)數(shù):變量每次被引用,值+1,當(dāng)沒有變量引用該變量時(shí)(值為0),則進(jìn)行回收。如果兩個(gè)對(duì)象對(duì)彼此互相引用,則會(huì)造成循環(huán)引用的問題

性能提升

多使用const和let聲明變量

共享和刪除:避免“先創(chuàng)建再補(bǔ)充”式的動(dòng)態(tài)屬性賦值,在構(gòu)造函數(shù)中一次性聲明所有屬性,同時(shí)避免delete動(dòng)態(tài)刪除屬性,而是將不在使用的屬性值設(shè)置為null

內(nèi)存泄漏:閉包中的回調(diào)會(huì)引用外部的變量,導(dǎo)致外部變量一直被引用無法回收。

靜態(tài)分配:在函數(shù)中創(chuàng)建對(duì)象,如果函數(shù)不斷使用,就會(huì)不斷有對(duì)象內(nèi)存需要回收,從而不斷調(diào)用垃圾回收程序??梢栽谕獠縿?chuàng)建好對(duì)象,再將其以參數(shù)的形式傳入函數(shù),從而進(jìn)行靜態(tài)分配。文章來源地址http://www.zghlxwxcb.cn/news/detail-480771.html

到了這里,關(guān)于前端進(jìn)化筆記-JavaScript(三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • web前端javaScript筆記——(11)DOM

    屬性 ????????????????????????????????????此事件發(fā)生在何時(shí) onabort 圖像的加載被中斷。 onblur???????????????????????????????????元素失去焦點(diǎn)。 anchange?????????????????????????????????域的內(nèi)容被改變 onclick ?當(dāng)用戶點(diǎn)擊某

    2024年01月19日
    瀏覽(29)
  • 前端學(xué)習(xí)筆記:JavaScript基礎(chǔ)語法(ECMAScript)

    前端學(xué)習(xí)筆記:JavaScript基礎(chǔ)語法(ECMAScript)

    此博客參考b站:【黑馬程序員前端JavaScript入門到精通全套視頻教程,javascript核心進(jìn)階ES6語法、API、js高級(jí)等基礎(chǔ)知識(shí)和實(shí)戰(zhàn)教程】https://www.bilibili.com/video/BV1Y84y1L7Nn?p=76vd_source=06e5549bf018e111f4275c259292d0da 這份筆記適用于已經(jīng)學(xué)過一門編程語言(最好是C語言)的同學(xué),如果你沒有

    2024年02月16日
    瀏覽(67)
  • 前端學(xué)習(xí)心得筆記之三(JavaScript篇)

    前端學(xué)習(xí)心得筆記之三(JavaScript篇)

    JavaScript一種運(yùn)行在客戶端(瀏覽器)上的解釋性弱語言,是前端的重中之重,在計(jì)算機(jī)剛剛興起的那個(gè)時(shí)代,這個(gè)由十天倉促編成的語言發(fā)展到現(xiàn)在也是令人吹噓。 文件引用 在一個(gè)單獨(dú)的js文件中也可以編寫JavaScript代碼,然后在HTML文件使用script標(biāo)簽進(jìn)行引用以下為演示 m

    2024年04月23日
    瀏覽(26)
  • web前端javascript筆記——(13)事件(1)

    鼠標(biāo)/鍵盤屬性 altKey???????????????返回當(dāng)事件被觸發(fā)時(shí),“ALT”是否被按下。 button???????????????返回當(dāng)事件被觸發(fā)時(shí),哪個(gè)鼠標(biāo)按鈕被點(diǎn)擊 clientX???????????????返回當(dāng)事件被觸發(fā)時(shí),鼠標(biāo)指針的水平坐標(biāo)。 clientY???????????????返回當(dāng)事件被觸

    2024年01月25日
    瀏覽(27)
  • 【JavaEE初階】前端第四節(jié).JavaScript入門學(xué)習(xí)筆記

    【JavaEE初階】前端第四節(jié).JavaScript入門學(xué)習(xí)筆記

    作者簡介:大家好,我是未央; 博客首頁:未央.303 系列專欄:Java測(cè)試開發(fā) 每日一句:人的一生,可以有所作為的時(shí)機(jī)只有一次,那就是現(xiàn)在?。。?前言 一、前置知識(shí)? 1、JS?和 HTML 和 CSS 之間的關(guān)系 1.2?JS 的書寫形式 1.2.1 內(nèi)嵌式 1.2.2?行內(nèi)式? 1.2.3?外部式 1.2.4?擴(kuò)展 1.2

    2024年02月08日
    瀏覽(19)
  • 前端基礎(chǔ)(CSS)——css介紹 & 常用樣式 & 案例—進(jìn)化到Bootstrap——進(jìn)化到Element-UI(未完待續(xù))

    前端基礎(chǔ)(CSS)——css介紹 & 常用樣式 & 案例—進(jìn)化到Bootstrap——進(jìn)化到Element-UI(未完待續(xù))

    css是什么,層疊樣式表, css作用:讓html網(wǎng)頁有布局,變漂亮 參考w3school 以p標(biāo)簽為例, 序號(hào) 位置 優(yōu)先級(jí) 1 寫在p標(biāo)簽內(nèi) 最高 2 寫在style內(nèi) 第二 3 寫在link內(nèi) 最低 (1)標(biāo)簽選擇器—div{} 標(biāo)簽選擇器,選擇html文檔中所有的div,對(duì)所有的div進(jìn)行設(shè)置 (2)id選擇器----#div01{} 符號(hào)

    2024年02月08日
    瀏覽(25)
  • 【視頻筆記】解密RWKV線性注意力的進(jìn)化過程

    【視頻筆記】解密RWKV線性注意力的進(jìn)化過程

    from: https://www.bilibili.com/video/BV1zW4y1D7Qg/?spm_id_from=333.999.0.0vd_source=21cce77bb69d40a81e0d37999f2da0c2 手動(dòng)實(shí)現(xiàn),可以看出 時(shí)間復(fù)雜度 O ( n 2 ) O(n^2) O ( n 2 ) 調(diào)用庫函數(shù) 權(quán)重 衰減 權(quán)重 迭代 記錄

    2024年02月12日
    瀏覽(13)
  • 讀千腦智能筆記11_保存人類遺產(chǎn)

    讀千腦智能筆記11_保存人類遺產(chǎn)

    1.1.1.1.?這是一個(gè)力圖尋找宇宙其他地方智能生物存在證據(jù)的研究項(xiàng)目 1.1.1.2.?SETI計(jì)劃旨在尋找含有某種模式的無線電信號(hào),表明該信號(hào)是由一個(gè)智能生物發(fā)出的 1.1.1.3.?即使我們無法與外星生物溝通,但知道他們存在或曾經(jīng)存在,就已令我們激動(dòng)不已 1.1.1.4.?了解其他智能生

    2024年02月19日
    瀏覽(18)
  • 讀千腦智能筆記12_阻止人類滅絕

    讀千腦智能筆記12_阻止人類滅絕

    1.1.?宇宙中唯一知道這些的物體,唯一知道宇宙存在的物體,是我們的大腦 1.2.?如果沒有關(guān)于某個(gè)事物的知識(shí),我們能說這個(gè)事物就一定存在嗎? 1.2.1.?我們的大腦扮演著這樣一個(gè)獨(dú)特的角色,這很令人著迷 1.3.?30%的大腦,即舊腦,是由許多不同部分組成的 1.3.1.?舊腦區(qū)域

    2024年02月19日
    瀏覽(15)
  • 讀千腦智能筆記10_人類智能存在的風(fēng)險(xiǎn)

    讀千腦智能筆記10_人類智能存在的風(fēng)險(xiǎn)

    1.4.1.1.?人類大腦中有30%的部分進(jìn)化得更早,并創(chuàng)造了我們的原始欲望和行為 1.4.1.2.?大腦中的新皮質(zhì)發(fā)明了強(qiáng)大到可以改變整個(gè)地球的技術(shù),然而控制這些技術(shù)的人類行為往往是由自私且短視的舊腦所主導(dǎo)的 1.4.1.3.?人類的血統(tǒng)可追溯到數(shù)十億年前 1.4.1.3.1.?在跨度如此之大的

    2024年02月19日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包