成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何理解 (object.getName = object.getName)() 這段代碼?

hzx / 2264人閱讀

摘要:此段代碼出自高級(jí)程序設(shè)計(jì)第版,代碼片段如下理解此段代碼,首先要明確一個(gè)點(diǎn)賦值語(yǔ)句是有返回值的,返回值就是所賦的值也就是右邊的值。那么上面這個(gè)賦值語(yǔ)句的返回值就是指向的函數(shù)體本身了那么其實(shí)就相當(dāng)于該段代碼的調(diào)用者為,所以指向,最終結(jié)果為。

1.

此段代碼出自《JavaScript高級(jí)程序設(shè)計(jì)(第3版)》 p.183,代碼片段如下:

var name = "The Window";
var object = {
    name : "My Object",
    getName: function(){
         return this.name;
    }
};
(object.getName = object.getName)(); //"The Window" 

理解此段代碼,首先要明確一個(gè)點(diǎn):賦值語(yǔ)句是有返回值的,返回值就是所賦的值(也就是‘=’右邊的值)。

object.getName = object.getName ;

上面這行代碼的含義就是:將等號(hào)左邊 object 對(duì)象的 getName 方法賦值為 object.getName。(剛看這段代碼時(shí)犯了一個(gè)錯(cuò)誤,即getName 方法后面是沒有加括號(hào)的,也即是函數(shù)不執(zhí)行,僅僅是傳遞了它的引用。)

那么上面這個(gè)賦值語(yǔ)句的返回值就是 object.getName 指向的函數(shù)體本身了:

function(){
   return this.name;
}

那么 (object.getName = object.getName)();其實(shí)就相當(dāng)于:

(function(){
   return this.name;
})();

該段代碼的調(diào)用者為 window,所以 this 指向window,最終結(jié)果為 "The Window"。

2.

怎樣理解紅寶書182頁(yè)這段代碼。

var name = "The Window";

var object = {
    name : "My Object",

    getNameFunc : function() {
        return function() {
            return this.name;
        };
    }
};

alert(object.getNameFunc()());

首先定義了一個(gè)全局變量 name = "The Window";隨后在 object 對(duì)象里又重新給 name 賦值為 "My Object",但是此時(shí) name 為局部變量,object 對(duì)象還有一個(gè)方法 getNameFunc ,這個(gè)方法返回一個(gè)閉包。

object.getNameFunc()() 這一表達(dá)式其實(shí)可以分解為兩步:

var first = object.getNameFunc(),調(diào)用 getNameFunc 方法,那么就相當(dāng)于:

var first = function() {
    return this.name;
};

var second = first(),調(diào)用第一步返回的閉包,相當(dāng)于:

var second = function() {
    return this.name;
}();

而此時(shí)是在全局作用域中調(diào)用 first 函數(shù),所以里面的 this 對(duì)象等于 window,那么 返回的是:window.name,就是"The Window"。

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

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

相關(guān)文章

  • 前端學(xué)習(xí)筆記之閉包——看了一張圖終于明白啥是閉包了

    摘要:在一個(gè)閉包環(huán)境內(nèi)修改變量值,不會(huì)影響另一個(gè)閉包中的變量。直到看到函數(shù)閉包閉包這篇文章的代碼一部分,終于明白其中的邏輯了。 閉包 閉包定義:指擁有多個(gè)變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該表達(dá)式的一部分。函數(shù)內(nèi)部可以直接讀取全局變量。函數(shù)內(nèi)部變量無(wú)法在函數(shù)外部訪問(wèn)。函數(shù)內(nèi)部聲明要用var或者let聲明,不然會(huì)變成全局變量鏈?zhǔn)阶饔糜颍鹤訉?duì)象會(huì)一級(jí)級(jí)向上尋找...

    andycall 評(píng)論0 收藏0
  • JavaScript之關(guān)于this對(duì)象

    摘要:不過(guò)匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其對(duì)象通常指向。在閉包中使用對(duì)象可能會(huì)導(dǎo)致一些問(wèn)題。這個(gè)對(duì)象還包含一個(gè)方法它返回一個(gè)匿名函數(shù),而匿名函數(shù)又返回,這個(gè)匿名函數(shù)就是閉包。偽代碼過(guò)程在定義匿名函數(shù)之前,把對(duì)象賦值給了一個(gè)名叫的變量。 this對(duì)象 前言:最近在細(xì)讀Javascript高級(jí)程序設(shè)計(jì),對(duì)于我而言,中文版,書中很多地方翻譯的差強(qiáng)人意,所以用自己所理解的,嘗試解讀下。如有紕漏...

    happyfish 評(píng)論0 收藏0
  • JS的閉包與this詳解

    摘要:刪除對(duì)匿名函數(shù)的引用,以便釋放內(nèi)存在匿名函數(shù)從中被返回后,它的作用域鏈被初始化為包含函數(shù)的活動(dòng)對(duì)象和全局變量對(duì)象。閉包與變量我們要注意到,閉包只能取到任意變量的最后值,也就是我們保存的是活動(dòng)對(duì)象,而不是確定值。 工作中會(huì)遇到很多 this對(duì)象 指向不明的問(wèn)題,你可能不止一次用過(guò) _self = this 的寫法來(lái)傳遞this對(duì)象,它每每會(huì)讓我們覺得困惑和抓狂,我們很可能會(huì)好奇其中到底發(fā)...

    fireflow 評(píng)論0 收藏0
  • 理解JavaScript中的this

    摘要:別的文章一來(lái)就舉例子,我這里首先告訴大家一個(gè)結(jié)論指向的是調(diào)用函數(shù)的那個(gè)對(duì)象。這里依然是之前的例子中的俗稱箭頭函數(shù),使用它來(lái)定義匿名函數(shù),同樣可以解決的綁定問(wèn)題這是由于函數(shù)體內(nèi)的就是定義時(shí)所在的對(duì)象,而不是執(zhí)行時(shí)所在的對(duì)象。 一、結(jié)論在前 javascript中的this是一個(gè)老生常談的話題,但不知道是之前那些作者沒講清楚還是我太笨沒能理解,始終沒能真正理解它,隨著自己在項(xiàng)目過(guò)程中的大量...

    genedna 評(píng)論0 收藏0
  • JavaScript 閉包

    摘要:閉包的注意事項(xiàng)通常,函數(shù)的作用域及其所有變量都會(huì)在函數(shù)執(zhí)行結(jié)束后被銷毀。但是,在創(chuàng)建了一個(gè)閉包以后,這個(gè)函數(shù)的作用域就會(huì)一直保存到閉包不存在為止。最后通過(guò)釋放了和對(duì)閉包的引用。從而使用閉包模塊化代碼,減少全局變量的污染。 JavaScript 閉包 原文鏈接 什么是閉包(Closure) 簡(jiǎn)單講,閉包就是指有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域中的變量的函數(shù)。 MDN 上面這么說(shuō):閉包是一種特殊的...

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

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

0條評(píng)論

hzx

|高級(jí)講師

TA的文章

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