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

資訊專欄INFORMATION COLUMN

淺析js閉包

cnio / 2939人閱讀

摘要:在中,變量只有兩種,全局變量和局部變量。這里要注意的是定義局部變量必須加上,否則定義了全局變量。上面也可以這樣實現(xiàn)那么閉包的特點是什么呢首先是之前一直在強調(diào)的可以訪問一個函數(shù)的局部變量。

**什么是閉包?**

閉包是指所有能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。在JavaScript中,變量只有兩種,全局變量和局部變量。區(qū)別在于任何函數(shù)都可以直接對全局變量進(jìn)行訪問,而局部變量則只有當(dāng)前函數(shù)以及定義在該函數(shù)內(nèi)部的函數(shù)可以進(jìn)行訪問。

訪問全局變量如下:

var a = 1;
function show() {
    console.log(a);
};

var showTest = show(); //1 此時函數(shù)訪問的是全局變量a

但是如果是在函數(shù)內(nèi)部定義了變量a,那么在函數(shù)外部是不可訪問的。這里要注意的是定義局部變量必須加上var,否則定義了全局變量a。

function show() {
    var a = 100;
};

console.log(a) //此時會報錯,a未定義

那么想訪問函數(shù)內(nèi)部的變量a有什么方法呢,不考慮直接返回變量a的情況。因為內(nèi)部函數(shù)可以通過作用域鏈訪問到父函數(shù)的局部變量,那我們是不是可以在函數(shù)內(nèi)部定義一個函數(shù)來讀取a呢?

function show() {
    var a = 100;
    var inShow = function() {
        console.log(a);
    };
    return inShow;
};

var showTest = show();
showTest(); //100

這就是閉包,通過內(nèi)部函數(shù)訪問父函數(shù)的變量,再通過返回內(nèi)部函數(shù),使可以在外部訪問函數(shù)的局部變量。上面也可以這樣實現(xiàn)

function show() {
    var a = 100;
    return function() {
        console.log(a);
    };
};

var showTest = show();
showTest(); //100

那么閉包的特點是什么呢?

首先是之前一直在強調(diào)的可以訪問一個函數(shù)的局部變量。

可以使變量一直存在內(nèi)存中。怎么理解呢?如上例子中,我們通過返回inShow函數(shù),并將其賦值給一個全局變量showTest,從而使得函數(shù)inShow一直存在內(nèi)存中,而inShow是函數(shù)show的內(nèi)部函數(shù),所以函數(shù)show也存在內(nèi)存中,不會被銷毀。

因此使用閉包時要注意不能濫用,可能造成性能較差,ie中出現(xiàn)內(nèi)存泄露等問題。因此在退出函數(shù)時,可以通過刪除不常使用的常量來緩解這一情況。

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

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

相關(guān)文章

  • 淺析Vue響應(yīng)式原理(三)

    摘要:響應(yīng)式原理之不論如何,最終響應(yīng)式數(shù)據(jù)都要通過來實現(xiàn),實際要借助新增的。在函數(shù)內(nèi),首先實例化一個實例,會在稍后添加為響應(yīng)式數(shù)據(jù)自定義的中發(fā)揮作用。只有數(shù)組和對象才可能是響應(yīng)式,才能返回實例。參考鏈接技術(shù)內(nèi)幕揭開數(shù)據(jù)響應(yīng)系統(tǒng)的面紗源碼 Vue響應(yīng)式原理之defineReactive defineReactive 不論如何,最終響應(yīng)式數(shù)據(jù)都要通過defineReactive來實現(xiàn),實際要借助...

    tomener 評論0 收藏0
  • PHP容器--Pimple運行流程淺析

    摘要:實際上,閉包和匿名函數(shù)是偽裝成函數(shù)的對象。容器流程淺析是社區(qū)中比較流行的容器。服務(wù)提供者服務(wù)提供者是連接容器與具體功能實現(xiàn)類的橋梁。服務(wù)提供者需要實現(xiàn)接口所有服務(wù)提供者必須實現(xiàn)接口方法。但已經(jīng)完成了服務(wù)提供者的注冊工作。 需要具備的知識點 閉包 閉包和匿名函數(shù)在PHP5.3.0中引入的。 閉包是指:創(chuàng)建時封裝周圍狀態(tài)的函數(shù)。即使閉包所處的環(huán)境不存在了,閉包中封裝的狀態(tài)依然存在。 理論上...

    RobinTang 評論0 收藏0
  • 淺析 PHP 閉包

    摘要:閉包也叫匿名函數(shù)引入。建議在代碼結(jié)構(gòu)比較亂,需要封裝的時候使用。希望此文能幫到未曾使用或者對的閉包有疑問的同學(xué),同時如果有不對的地方歡迎支出。 閉包也叫匿名函數(shù) PHP5.3 引入。 使用方法 需要調(diào)整數(shù)組元素中的值 php$data = range(0, 100);//想要每個元素的值都加上.html的后綴 $suffix = .html; function makeSu...

    focusj 評論0 收藏0
  • 【V8引擎】淺析Chrome V8引擎中的垃圾回收機制和內(nèi)存泄露優(yōu)化策略

    摘要:一前言的垃圾回收機制使用垃圾回收機制來自動管理內(nèi)存。垃圾回收器只會針對新生代內(nèi)存區(qū)老生代指針區(qū)以及老生代數(shù)據(jù)區(qū)進(jìn)行垃圾回收。分別對新生代和老生代使用不同的垃圾回收算法來提升垃圾回收的效率。 V8 實現(xiàn)了準(zhǔn)確式 GC,GC 算法采用了分代式垃圾回收機制。因此,V8 將內(nèi)存(堆)分為新生代和老生代兩部分。 一、前言 V8的垃圾回收機制:JavaScript使用垃圾回收機制來自動管理內(nèi)存。垃...

    qingshanli1988 評論0 收藏0
  • koa2 總體流程原理淺析(二) 之 中間件原理

    摘要:任何一層報錯,都能用捕獲總結(jié)是一個非常輕量級的框架,只實現(xiàn)了中間件處理流程和對對象的封裝。其他的功能都由外部中間件提供。 koa 的中間件機制巧妙的運用了閉包和 async await 的特點,形成了一個洋蔥式的流程,和 JS 的事件流 (捕獲 -> target -> 冒泡) 相似 handleRequest(ctx, fnMiddleware) { const res ...

    zhoutk 評論0 收藏0

發(fā)表評論

0條評論

cnio

|高級講師

TA的文章

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