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

資訊專欄INFORMATION COLUMN

困擾我的Javascript的閉包

yuanxin / 1012人閱讀

摘要:一,理解閉包就要先理解作用域作用域在中作用域是由函數(shù)劃分的,所有屬于全局作用域的變量都是對象的屬性函數(shù)可以訪問函數(shù),函數(shù)外不能訪問函數(shù)里定義的變量,那么函數(shù)能訪問函數(shù)里定義的變量那么可以將函數(shù)作為返回值,然后提供給外部作為接口,那么外部就能

一,理解閉包就要先理解作用域

作用域scope 在js中作用域scope是由函數(shù)劃分的,所有屬于全局作用域的變量都是window對象的屬性(prototype);

function A(){
 var num =2;
 function B(){
 console.log(num);
  }
}
//B函數(shù)可以訪問A函數(shù),A函數(shù)外不能訪問A函數(shù)里定義的變量,那么B函數(shù)能訪問A函數(shù)里定義的變量;
//那么可以將B函數(shù)作為返回值,然后提供給外部(作為接口),那么外部就能訪問A函數(shù)里的變量了
//鏈?zhǔn)阶饔糜騝hain scope :子對象一級一級向父級對象尋找變量

var num = 2;
var obj = {
   num :3,
   getNum :function (){
   console.log(this.num)
  }
}
obj.getNum();//3


var n = 2;
var obj = {
    n:3,
    getNum:function (){
    setTimeout(console.log(this.n),3000);
    }
}
obj.getNum();//3


var n = 2;
var obj = {
     n:3,
     getNum:funciton(){
     setTimeout(function(){
        console.log(this.n)
     },3000)
     }
};
obj.getNum();//2
二,閉包c(diǎn)losure:內(nèi)層的函數(shù)可以引用他外層函數(shù)內(nèi)的變量,即使外層的執(zhí)行已經(jīng)終止
//閉包的典型案例,實(shí)現(xiàn)訪問函數(shù)內(nèi)部的變量
function people() {
 var name = "maoguotao";
 function getname(){
    console.log(name);
 } 
return getname;
}
var person = people();
person();

函數(shù)getName就是這個(gè)people函數(shù)的對外接口提供能夠訪問到內(nèi)部定義的name,因此getName函數(shù)和變量name組成的環(huán)境就稱之為閉包;

閉包的兩個(gè)特點(diǎn):1,可以訪問函數(shù)內(nèi)部的變量,2,這些變量的值始終是保存在內(nèi)存中

1.可以訪問函數(shù)內(nèi)部的變量

function A(){
    var name = "maoguotao";
    this.getName = function () {
       console.log(name);
    }
}

var a = new A();
a.getName();

2.這些變量的值始終是保存在內(nèi)存中

function A(){
 var name = "maoguotao";
 addName = function (){
     name = name + "12";
  }
 function getName(){
     console.log(name+"34");
 }
return getName;
}
var a = A();
a();
//maoguotao34
addName();
a();
//maoguotao1234

a函數(shù)執(zhí)行了兩次,也就是說閉包getName函數(shù)執(zhí)行了兩次,實(shí)際上局部變量name是保存在內(nèi)存中的,并沒有在第一次的a()調(diào)用完之后清除,因?yàn)锳函數(shù)是getName閉包函數(shù)的父函數(shù),而getName函數(shù)被賦給a全局變量,使得getName函數(shù)始終在內(nèi)存中,而getName函數(shù)依賴于A函數(shù),所以A函數(shù)也是在內(nèi)存中,不會在調(diào)用結(jié)束后清除;

閉包的缺點(diǎn):
1,閉包使得函數(shù)中的變量保存在內(nèi)存中,對內(nèi)存消耗很大,不能濫用,會造成網(wǎng)頁的性能問題,在IE中可能導(dǎo)致內(nèi)存的泄露,解決辦法就是在退出函數(shù)之前將使用的局部變量全部刪除;

2,閉包會在父函數(shù)外部,改變父函數(shù)的內(nèi)部變量的值,因此,把父函數(shù)當(dāng)作Object對象使用,把閉包當(dāng)作他的公用方法,把內(nèi)部變量當(dāng)作他的私有屬性;

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

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

相關(guān)文章

  • 初學(xué)者徹底理解javascript閉包以及this關(guān)鍵字

    摘要:理解了這句話,我們就可以來看閉包了閉包前面說過,函數(shù)可以訪問函數(shù)作用域鏈中的變量,但如果我們想在函數(shù)外訪問函數(shù)內(nèi)卻不行了。 不管是閉包還是this關(guān)鍵字,都是困擾JS初學(xué)者的比較難懂的東西,如果你對它們的認(rèn)識還不足夠清晰,那么現(xiàn)在就一起把它們掌握掉。還是那句話,我們從最基本的開始,建立起一個(gè)非常清晰的知識結(jié)構(gòu),好了,開始吧 ? 閉包 當(dāng)然我們今天說的是javascript里的閉包。要學(xué)...

    魏明 評論0 收藏0
  • 前端基礎(chǔ)進(jìn)階(六):在chrome開發(fā)者工具中觀察函數(shù)調(diào)用棧、作用域鏈與閉包

    摘要:在的開發(fā)者工具中,通過斷點(diǎn)調(diào)試,我們能夠非常方便的一步一步的觀察的執(zhí)行過程,直觀感知函數(shù)調(diào)用棧,作用域鏈,變量對象,閉包,等關(guān)鍵信息的變化。其中表示當(dāng)前的局部變量對象,表示當(dāng)前作用域鏈中的閉包。 showImg(https://segmentfault.com/img/remote/1460000008404321); 在前端開發(fā)中,有一個(gè)非常重要的技能,叫做斷點(diǎn)調(diào)試。 在chrome...

    draveness 評論0 收藏0
  • 初學(xué)者快速學(xué)會javascript原型,原型鏈,原型繼承

    摘要:學(xué)習(xí),總繞不開原型,原型鏈,繼承等等這些知識。對象那么好,怎么才能找一個(gè)呸,其實(shí)是創(chuàng)建創(chuàng)建對象的方法對象字面量工廠模式構(gòu)造函數(shù)模式原型模式等。原型鏈有什么用來談?wù)劺^承,繼承可以利用構(gòu)造函數(shù),使用屬性等來實(shí)現(xiàn)。 初學(xué)者學(xué)習(xí)javascript可能會感覺很困擾,但是你一旦真正了解了它,我相信你會愛上它。學(xué)習(xí)ECMAScript,總繞不開原型,原型鏈,繼承等等這些知識。今天把它們放在一塊兒,...

    hiYoHoo 評論0 收藏0
  • 小技巧 - 收藏集 - 掘金

    摘要:然而學(xué)習(xí)布局,你只要學(xué)習(xí)幾個(gè)手機(jī)端頁面自適應(yīng)解決方案布局進(jìn)階版附源碼示例前端掘金一年前筆者寫了一篇手機(jī)端頁面自適應(yīng)解決方案布局,意外受到很多朋友的關(guān)注和喜歡。 十分鐘學(xué)會 Fiddler - 后端 - 掘金一.Fiddler介紹 Fiddler是一個(gè)http抓包改包工具,fiddle英文中有欺騙、偽造之意,與wireshark相比它更輕量級,上手簡單,因?yàn)橹荒茏ttp和https數(shù)據(jù)...

    A Loity 評論0 收藏0
  • JS 中閉包是什么?

    摘要:大名鼎鼎的閉包面試必問。閉包的作用是什么。看到閉包在哪了嗎閉包到底是什么五年前,我也被這個(gè)問題困擾,于是去搜了并總結(jié)下來。關(guān)于閉包的謠言閉包會造成內(nèi)存泄露錯。閉包里面的變量明明就是我們需要的變量,憑什么說是內(nèi)存泄露這個(gè)謠言是如何來的因?yàn)椤? 本文為饑人谷講師方方原創(chuàng)文章,首發(fā)于 前端學(xué)習(xí)指南。 大名鼎鼎的閉包!面試必問。請用自己的話簡述 什么是「閉包」。 「閉包」的作用是什么。 首先...

    Enlightenment 評論0 收藏0

發(fā)表評論

0條評論

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