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

資訊專(zhuān)欄INFORMATION COLUMN

困擾我的Javascript的閉包

yuanxin / 1010人閱讀

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

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

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

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

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)訪問(wè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ù)的對(duì)外接口提供能夠訪問(wèn)到內(nèi)部定義的name,因此getName函數(shù)和變量name組成的環(huán)境就稱(chēng)之為閉包;

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

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/89355.html

相關(guān)文章

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

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

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

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

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

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

    hiYoHoo 評(píng)論0 收藏0
  • 小技巧 - 收藏集 - 掘金

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

    A Loity 評(píng)論0 收藏0
  • JS 中閉包是什么?

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

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

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

0條評(píng)論

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