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

資訊專欄INFORMATION COLUMN

這可能是需要系統(tǒng)學(xué)js的人最重要且容易被忽略的一些概念

3fuyu / 2799人閱讀

摘要:寫(xiě)這篇文章之前是看了這篇文章講關(guān)于箭頭函數(shù)中指向的問(wèn)題,于是借此把相關(guān)的函數(shù),構(gòu)造函數(shù),,,箭頭函數(shù)的一些概念結(jié)合自己的理解又理了一遍,想著好好復(fù)習(xí)一下,最后有了寫(xiě)這篇文章的想法。這個(gè)上下文棧就是執(zhí)行程序的基礎(chǔ)。

寫(xiě)這篇文章之前是看了這篇文章講關(guān)于箭頭函數(shù)中this指向的問(wèn)題,于是借此把相關(guān)的函數(shù),構(gòu)造函數(shù),new,this,箭頭函數(shù)的一些概念結(jié)合自己的理解又理了一遍,想著好好復(fù)習(xí)一下,最后有了寫(xiě)這篇文章的想法。我不太喜歡說(shuō)一些太專業(yè)的話(自己菜,沒(méi)法專業(yè)),所以都是自己理解以及自己總結(jié)最后得出的結(jié)論,首先看下下面這四個(gè)控制臺(tái)的輸出結(jié)果:

1.
var a = 11
function test () {
    this.a = 22
    let b = function () {
        consolve.log(this.a)
    }
    b()
}
var x = new test()  =>  11
x.a  =>  22

2.
var a = 11
function test () {
    this.a = 22
    let b = function () {
        consolve.log(this.a)
    }
    b()
}
var x = test()  =>  22
x.a  =>  Uncaught TypeError: Cannot read property "a" of undefined

3.
var a = 11
function test () {
    this.a = 22
    let b = () => {
        consolve.log(this.a)
    }
    b()
}
var x = new test()  =>   22
x.a  =>  22

4.
var a = 11
function test () {
    this.a = 22
    let b = () => {
        consolve.log(a)
    }
    b()
}
var x = new test()  =>   11
x.a  =>  22

如果你耐心得看完了這四段,并且你所想的結(jié)果就是控制臺(tái)的結(jié)果,那接下去你就可以不用看了,因?yàn)槲乙v的你應(yīng)該都懂,不過(guò)如果你有某段不明白,或者大部分不清楚,那下面的內(nèi)容還是很值得看看并且理解理解的,畢竟這些真的蠻重要。

首先提幾個(gè)概念:

執(zhí)行上下文(執(zhí)行環(huán)境):當(dāng)JavaScript代碼執(zhí)行的時(shí)候,會(huì)進(jìn)入不同的執(zhí)行上下文,這些執(zhí)行上下文會(huì)構(gòu)成了一個(gè)執(zhí)行上下文棧(Execution context stack,ECS)。這個(gè)上下文棧就是js執(zhí)行程序的基礎(chǔ)。

this: 它是動(dòng)態(tài)的,有人稱它為動(dòng)態(tài)上下文,我覺(jué)得不太對(duì),this指向一個(gè)環(huán)境對(duì)象(代表這個(gè)執(zhí)行環(huán)境),這是一個(gè)對(duì)象,而且是一個(gè)普通對(duì)象,而不是指向一個(gè)執(zhí)行環(huán)境。

以下是我自己結(jié)合上面的內(nèi)容的總結(jié):

函數(shù)(function): 函數(shù)它自己就是一個(gè)對(duì)象,它用來(lái)裝一些等著執(zhí)行的代碼,像層殼一樣,你不用它,它里面的代碼是不會(huì)執(zhí)行的,它身上綁著this(所以函數(shù)有自己的執(zhí)行環(huán)境)。

new : 用到new說(shuō)明有函數(shù)被當(dāng)作構(gòu)造函數(shù)來(lái)調(diào)用了。new會(huì)返回一個(gè)對(duì)象,像這里var x = new test()的變量x就指向這個(gè)返回出來(lái)的對(duì)象,new在返回對(duì)象之前會(huì)把函數(shù)殼里面的代碼拿出來(lái)執(zhí)行一遍,但是,此時(shí)殼被剝?nèi)チ?,?gòu)造函數(shù)里面的函數(shù)執(zhí)行環(huán)境自然就變了,就像這里的:

   let b = () => {
       consolve.log(this.a)
   }
   b()

自然b()暴露給了這會(huì)兒在外面的執(zhí)行環(huán)境(控制臺(tái)的話是window),但是構(gòu)造函數(shù)會(huì)將自己的this給它創(chuàng)建出來(lái)的對(duì)象(也可以說(shuō)給出的this成了這個(gè)對(duì)象),于是this.a = 22,a這個(gè)屬性被掛到了新建的對(duì)象上。
最后專業(yè)點(diǎn)的話可以這樣模擬一下new做的一系列操作(這樣就扯到原型鏈繼承的東西了這里暫時(shí)不需要管):

new Animal("cat") = {

    var obj = {};  // 新建一個(gè)對(duì)象

    obj.__proto__ = Animal.prototype;  // 實(shí)現(xiàn)原型鏈

    var result = Animal.call(obj,"cat");  // 用call給this

    return typeof result === "object"? result : obj;
}

箭頭函數(shù):這個(gè)es6出來(lái)的,現(xiàn)在運(yùn)用廣泛的東西跟函數(shù)有點(diǎn)不太一樣,我這里只討論一點(diǎn),就是它自己身上根本沒(méi)綁著this。所以在它里面調(diào)用this需要往父級(jí)去找,也就是它的this是繼承自父執(zhí)行環(huán)境的,而不是像有些人對(duì)其的解釋,它的this一開(kāi)始就固定了。也正是因?yàn)樗鼪](méi)有this,所以也就不能用作構(gòu)造函數(shù),也就沒(méi)法new。雖然最后結(jié)果是對(duì)的,但解釋不太對(duì)。

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

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

相關(guān)文章

  • 26自學(xué)轉(zhuǎn)行前端(寫(xiě)給和1年前一樣迷茫你)

    摘要:轉(zhuǎn)行前端有哪些疑慮在人生的抉擇處,尋求一些別人的經(jīng)驗(yàn)和總結(jié),無(wú)可厚非,但是決定了就一定要堅(jiān)定的走下去,謹(jǐn)慎是為了更好的堅(jiān)持,而不是放棄的理由。寫(xiě)在前面這里前后端指的是開(kāi)發(fā)的前后端。 轉(zhuǎn)行前端有哪些疑慮? 在人生的抉擇處,尋求一些別人的經(jīng)驗(yàn)和總結(jié),無(wú)可厚非,但是決定了就一定要堅(jiān)定的走下去,謹(jǐn)慎是為了更好的堅(jiān)持,而不是放棄的理由。寫(xiě)在前面:這里前后端指的是web開(kāi)發(fā)的前后端。1、前端崗位需...

    番茄西紅柿 評(píng)論0 收藏2637
  • 26自學(xué)轉(zhuǎn)行前端(寫(xiě)給和1年前一樣迷茫你)

    摘要:轉(zhuǎn)行前端有哪些疑慮在人生的抉擇處,尋求一些別人的經(jīng)驗(yàn)和總結(jié),無(wú)可厚非,但是決定了就一定要堅(jiān)定的走下去,謹(jǐn)慎是為了更好的堅(jiān)持,而不是放棄的理由。寫(xiě)在前面這里前后端指的是開(kāi)發(fā)的前后端。 轉(zhuǎn)行前端有哪些疑慮? 在人生的抉擇處,尋求一些別人的經(jīng)驗(yàn)和總結(jié),無(wú)可厚非,但是決定了就一定要堅(jiān)定的走下去,謹(jǐn)慎是為了更好的堅(jiān)持,而不是放棄的理由。寫(xiě)在前面:這里前后端指的是web開(kāi)發(fā)的前后端。1、前端崗位需...

    番茄西紅柿 評(píng)論0 收藏2577
  • 26自學(xué)轉(zhuǎn)行前端(寫(xiě)給和1年前一樣迷茫你)

    摘要:轉(zhuǎn)行前端有哪些疑慮在人生的抉擇處,尋求一些別人的經(jīng)驗(yàn)和總結(jié),無(wú)可厚非,但是決定了就一定要堅(jiān)定的走下去,謹(jǐn)慎是為了更好的堅(jiān)持,而不是放棄的理由。寫(xiě)在前面這里前后端指的是開(kāi)發(fā)的前后端。 轉(zhuǎn)行前端有哪些疑慮? 在人生的抉擇處,尋求一些別人的經(jīng)驗(yàn)和總結(jié),無(wú)可厚非,但是決定了就一定要堅(jiān)定的走下去,謹(jǐn)慎是為了更好的堅(jiān)持,而不是放棄的理由。寫(xiě)在前面:這里前后端指的是web開(kāi)發(fā)的前后端。1、前端崗位需...

    番茄西紅柿 評(píng)論0 收藏0
  • 程序員如何在996之外獲得收入

    摘要:因?yàn)榫W(wǎng)站建設(shè)一般項(xiàng)目比較小,我一個(gè)人是可以完成前后端開(kāi)發(fā)的,如果做成成品當(dāng)然得加上小蘇設(shè)計(jì)師。關(guān)鍵詞選擇因?yàn)槊嫦虻氖菃蝹€(gè)城市業(yè)務(wù),在城市選擇上猶豫了不少時(shí)間,首先得是一個(gè)大城市,客戶量足,當(dāng)時(shí)我在北京,小蘇是在一個(gè)省會(huì)城市。 我技術(shù)之外的資本是零,如果你也是這樣,那這篇文章適合你! 這是我的故事之一,希望對(duì)你有啟發(fā)。如果你每天下班后就是躺在床上刷刷斗音,看看微博。但是又總想擺脫黑暗迷亂...

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

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

0條評(píng)論

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