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

資訊專欄INFORMATION COLUMN

javascript之閉包,this

RaoMeng / 1116人閱讀

摘要:而函數(shù)被當(dāng)作某個(gè)對(duì)象的方法調(diào)用時(shí)也就是非匿名函數(shù),指的是那個(gè)對(duì)象。但是,匿名函數(shù)的作用域是全局的。不過(guò)可以把的外部函數(shù)的保存在一個(gè)變量中,的匿名函數(shù)調(diào)用這個(gè)變量代替。

什么是閉包?

簡(jiǎn)而言之,閉包就是指有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域中的變量的函數(shù),并且讓這些變量的值始終保持在內(nèi)存中。

常用的創(chuàng)建方法是在一個(gè)函數(shù)的內(nèi)部創(chuàng)建另一個(gè)函數(shù)。like:

function num1(){
    var n = 0;
       add = function(){
       n++;
       }
    function num2(){
      console.log(n);
    }
    return num2;
  }
  var result = num1();
  result(); // 0
    add();
    result(); // 1

第一次result()的結(jié)果是0,第二次是1,因?yàn)閚um2是num1的子函數(shù),它被賦予全局變量,因此會(huì)一直占用內(nèi)存,而num2的內(nèi)存依賴于num1,因此num1也一直占用內(nèi)存。不會(huì)把第一次得到的n放入垃圾回收機(jī)制。

另外add沒(méi)有用var聲明,因此它屬于全局變量。

由于閉包會(huì)攜帶包含它的的函數(shù)的作用域,因此會(huì)比其他函數(shù)占據(jù)更多的內(nèi)存,所以為了性能,要慎用閉包。

垃圾回收機(jī)制

在這里提一下上文說(shuō)到的垃圾回收機(jī)制,原理很簡(jiǎn)單:找出那些不再繼續(xù)使用的變量,釋放其占用的內(nèi)存。垃圾回收機(jī)制會(huì)按照固定的時(shí)間間隔,周期性地執(zhí)行操作。

this對(duì)象

在全局函數(shù)中,this等于window。而函數(shù)被當(dāng)作某個(gè)對(duì)象的方法調(diào)用時(shí)(也就是非匿名函數(shù)),this指的是那個(gè)對(duì)象。但是,匿名函數(shù)的作用域是全局的。因此匿名函數(shù)的this指的是window。

比如下面這個(gè)例子:

var name="sara";
var names={
    name:"Aom",
    sayName:function(){
       return function(){
         return this.name
       };
    }
};
alert(names.sayName()()); //"sara"

sayName()返回的是一個(gè)匿名函數(shù),匿名函數(shù)的作用域是全局的,因此this.name返回的是sara。

不過(guò)可以把sayName的外部函數(shù)的this保存在一個(gè)變量中,sayName的匿名函數(shù)調(diào)用這個(gè)變量代替this。就可以返回到外部函數(shù)的name。
實(shí)現(xiàn)如下:

var name="sara";
var names={
        name:"Aom",
        sayName:function(){
        var self = this;
           return function(){
             return this.name
           };
        }
};
alert(names.sayName()()); //"Aom"

this得值在幾種特殊情況下也會(huì)改變。

var name="sara";
var names={
        name:"Aom",
        sayName:function(){
             return this.name
        }
};
names.sayName();//"Aom"
(names.sayName)();//"Aom"
(names.sayName = names.sayName)();//"sara"

第一種情況很簡(jiǎn)單,在這里就不做解釋;第二種情況,因?yàn)椋╪ames.sayName)和names.sayName定義是相同的,所以結(jié)果是"Aom";第三種情況,括號(hào)內(nèi)進(jìn)行的賦值是sayName函數(shù)本身,并不會(huì)附帶賦值names的其他內(nèi)容,因此this發(fā)生了改變,取得window,結(jié)果為sara。

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

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

相關(guān)文章

  • JavaScript深入閉包

    摘要:深入系列第八篇,介紹理論上的閉包和實(shí)踐上的閉包,以及從作用域鏈的角度解析經(jīng)典的閉包題。定義對(duì)閉包的定義為閉包是指那些能夠訪問(wèn)自由變量的函數(shù)。 JavaScript深入系列第八篇,介紹理論上的閉包和實(shí)踐上的閉包,以及從作用域鏈的角度解析經(jīng)典的閉包題。 定義 MDN 對(duì)閉包的定義為: 閉包是指那些能夠訪問(wèn)自由變量的函數(shù)。 那什么是自由變量呢? 自由變量是指在函數(shù)中使用的,但既不是函數(shù)參數(shù)也...

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

    摘要:而閉包的妙處在于,當(dāng)函數(shù)在執(zhí)行完畢后它的活動(dòng)對(duì)象不會(huì)被銷毀,因?yàn)槟涿瘮?shù)的作用域鏈仍然在引用函數(shù)的活動(dòng)對(duì)象它的作用域鏈會(huì)被銷毀。 一、閉包 閉包是指有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域中的變量的函數(shù)。創(chuàng)建閉包的常用方式是,在一個(gè)函數(shù)內(nèi)部創(chuàng)建另一個(gè)函數(shù)。 請(qǐng)看以下代碼:我們?cè)赾reateComparisonFunction函數(shù)里創(chuàng)建了一個(gè)閉包 function createComparisonFun...

    Mr_houzi 評(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ì)于我而言,中文版,書(shū)中很多地方翻譯的差強(qiáng)人意,所以用自己所理解的,嘗試解讀下。如有紕漏...

    happyfish 評(píng)論0 收藏0
  • 【進(jìn)階2-2期】JavaScript深入從作用域鏈理解閉包

    摘要:使用上一篇文章的例子來(lái)說(shuō)明下自由變量進(jìn)階期深入淺出圖解作用域鏈和閉包訪問(wèn)外部的今天是今天是其中既不是參數(shù),也不是局部變量,所以是自由變量。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開(kāi)始前端進(jìn)階的第二期,本周的主題是作用域閉包,今天是第7天。 本計(jì)劃一共28期,每期重點(diǎn)攻克一個(gè)面試重難點(diǎn),如果你還不了解本進(jìn)階計(jì)...

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

    摘要:以上描述,全部符合閉包的描述,那這就是閉包。二執(zhí)行過(guò)程之前的文章講了函數(shù)的執(zhí)行上下文棧,變量對(duì)象,作用域鏈等內(nèi)容,接下來(lái)通過(guò)閉包代碼回顧代碼是怎么樣的執(zhí)行過(guò)程。將活動(dòng)對(duì)象壓入作用域鏈頂端。函數(shù)執(zhí)行結(jié)束,彈出執(zhí)行上下文棧。 本文一共 1300 字,讀完只需 5 分鐘 概述 閉包, 可以說(shuō)是每個(gè)前端工程師都聽(tīng)說(shuō)的一個(gè)詞,咋一看很難從字面上去理解,從而給人留下了閉包是一個(gè)重要又難以理解的...

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

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

0條評(píng)論

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