国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

這可能是需要系統學js的人最重要且容易被忽略的一些概念

3fuyu / 2716人閱讀

摘要:寫這篇文章之前是看了這篇文章講關于箭頭函數中指向的問題,于是借此把相關的函數,構造函數,,,箭頭函數的一些概念結合自己的理解又理了一遍,想著好好復習一下,最后有了寫這篇文章的想法。這個上下文棧就是執行程序的基礎。

寫這篇文章之前是看了這篇文章講關于箭頭函數中this指向的問題,于是借此把相關的函數,構造函數,new,this,箭頭函數的一些概念結合自己的理解又理了一遍,想著好好復習一下,最后有了寫這篇文章的想法。我不太喜歡說一些太專業的話(自己菜,沒法專業),所以都是自己理解以及自己總結最后得出的結論,首先看下下面這四個控制臺的輸出結果:

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

如果你耐心得看完了這四段,并且你所想的結果就是控制臺的結果,那接下去你就可以不用看了,因為我要講的你應該都懂,不過如果你有某段不明白,或者大部分不清楚,那下面的內容還是很值得看看并且理解理解的,畢竟這些真的蠻重要。

首先提幾個概念:

執行上下文(執行環境):當JavaScript代碼執行的時候,會進入不同的執行上下文,這些執行上下文會構成了一個執行上下文棧(Execution context stack,ECS)。這個上下文棧就是js執行程序的基礎。

this: 它是動態的,有人稱它為動態上下文,我覺得不太對,this指向一個環境對象(代表這個執行環境),這是一個對象,而且是一個普通對象,而不是指向一個執行環境。

以下是我自己結合上面的內容的總結:

函數(function): 函數它自己就是一個對象,它用來裝一些等著執行的代碼,像層殼一樣,你不用它,它里面的代碼是不會執行的,它身上綁著this(所以函數有自己的執行環境)。

new : 用到new說明有函數被當作構造函數來調用了。new會返回一個對象,像這里var x = new test()的變量x就指向這個返回出來的對象,new在返回對象之前會把函數殼里面的代碼拿出來執行一遍,但是,此時殼被剝去了,構造函數里面的函數執行環境自然就變了,就像這里的:

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

自然b()暴露給了這會兒在外面的執行環境(控制臺的話是window),但是構造函數會將自己的this給它創建出來的對象(也可以說給出的this成了這個對象),于是this.a = 22a這個屬性被掛到了新建的對象上。
最后專業點的話可以這樣模擬一下new做的一系列操作(這樣就扯到原型鏈繼承的東西了這里暫時不需要管):

new Animal("cat") = {

    var obj = {};  // 新建一個對象

    obj.__proto__ = Animal.prototype;  // 實現原型鏈

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

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

箭頭函數:這個es6出來的,現在運用廣泛的東西跟函數有點不太一樣,我這里只討論一點,就是它自己身上根本沒綁著this。所以在它里面調用this需要往父級去找,也就是它的this是繼承自父執行環境的,而不是像有些人對其的解釋,它的this一開始就固定了。也正是因為它沒有this,所以也就不能用作構造函數,也就沒法new。雖然最后結果是對的,但解釋不太對。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88824.html

相關文章

  • 26自學轉行前端(寫給和1年前一樣迷茫你)

    摘要:轉行前端有哪些疑慮在人生的抉擇處,尋求一些別人的經驗和總結,無可厚非,但是決定了就一定要堅定的走下去,謹慎是為了更好的堅持,而不是放棄的理由。寫在前面這里前后端指的是開發的前后端。 轉行前端有哪些疑慮? 在人生的抉擇處,尋求一些別人的經驗和總結,無可厚非,但是決定了就一定要堅定的走下去,謹慎是為了更好的堅持,而不是放棄的理由。寫在前面:這里前后端指的是web開發的前后端。1、前端崗位需...

    番茄西紅柿 評論0 收藏2637
  • 26自學轉行前端(寫給和1年前一樣迷茫你)

    摘要:轉行前端有哪些疑慮在人生的抉擇處,尋求一些別人的經驗和總結,無可厚非,但是決定了就一定要堅定的走下去,謹慎是為了更好的堅持,而不是放棄的理由。寫在前面這里前后端指的是開發的前后端。 轉行前端有哪些疑慮? 在人生的抉擇處,尋求一些別人的經驗和總結,無可厚非,但是決定了就一定要堅定的走下去,謹慎是為了更好的堅持,而不是放棄的理由。寫在前面:這里前后端指的是web開發的前后端。1、前端崗位需...

    番茄西紅柿 評論0 收藏2577
  • 26自學轉行前端(寫給和1年前一樣迷茫你)

    摘要:轉行前端有哪些疑慮在人生的抉擇處,尋求一些別人的經驗和總結,無可厚非,但是決定了就一定要堅定的走下去,謹慎是為了更好的堅持,而不是放棄的理由。寫在前面這里前后端指的是開發的前后端。 轉行前端有哪些疑慮? 在人生的抉擇處,尋求一些別人的經驗和總結,無可厚非,但是決定了就一定要堅定的走下去,謹慎是為了更好的堅持,而不是放棄的理由。寫在前面:這里前后端指的是web開發的前后端。1、前端崗位需...

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

    摘要:因為網站建設一般項目比較小,我一個人是可以完成前后端開發的,如果做成成品當然得加上小蘇設計師。關鍵詞選擇因為面向的是單個城市業務,在城市選擇上猶豫了不少時間,首先得是一個大城市,客戶量足,當時我在北京,小蘇是在一個省會城市。 我技術之外的資本是零,如果你也是這樣,那這篇文章適合你! 這是我的故事之一,希望對你有啟發。如果你每天下班后就是躺在床上刷刷斗音,看看微博。但是又總想擺脫黑暗迷亂...

    siberiawolf 評論0 收藏0

發表評論

0條評論

3fuyu

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<