摘要:在中,變量只有兩種,全局變量和局部變量。這里要注意的是定義局部變量必須加上,否則定義了全局變量。上面也可以這樣實現那么閉包的特點是什么呢首先是之前一直在強調的可以訪問一個函數的局部變量。
**什么是閉包?**
閉包是指所有能夠讀取其他函數內部變量的函數。在JavaScript中,變量只有兩種,全局變量和局部變量。區別在于任何函數都可以直接對全局變量進行訪問,而局部變量則只有當前函數以及定義在該函數內部的函數可以進行訪問。
訪問全局變量如下:
var a = 1; function show() { console.log(a); }; var showTest = show(); //1 此時函數訪問的是全局變量a
但是如果是在函數內部定義了變量a,那么在函數外部是不可訪問的。這里要注意的是定義局部變量必須加上var,否則定義了全局變量a。
function show() { var a = 100; }; console.log(a) //此時會報錯,a未定義
那么想訪問函數內部的變量a有什么方法呢,不考慮直接返回變量a的情況。因為內部函數可以通過作用域鏈訪問到父函數的局部變量,那我們是不是可以在函數內部定義一個函數來讀取a呢?
function show() { var a = 100; var inShow = function() { console.log(a); }; return inShow; }; var showTest = show(); showTest(); //100
這就是閉包,通過內部函數訪問父函數的變量,再通過返回內部函數,使可以在外部訪問函數的局部變量。上面也可以這樣實現
function show() { var a = 100; return function() { console.log(a); }; }; var showTest = show(); showTest(); //100
那么閉包的特點是什么呢?
首先是之前一直在強調的可以訪問一個函數的局部變量。
可以使變量一直存在內存中。怎么理解呢?如上例子中,我們通過返回inShow函數,并將其賦值給一個全局變量showTest,從而使得函數inShow一直存在內存中,而inShow是函數show的內部函數,所以函數show也存在內存中,不會被銷毀。
因此使用閉包時要注意不能濫用,可能造成性能較差,ie中出現內存泄露等問題。因此在退出函數時,可以通過刪除不常使用的常量來緩解這一情況。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/96570.html
摘要:響應式原理之不論如何,最終響應式數據都要通過來實現,實際要借助新增的。在函數內,首先實例化一個實例,會在稍后添加為響應式數據自定義的中發揮作用。只有數組和對象才可能是響應式,才能返回實例。參考鏈接技術內幕揭開數據響應系統的面紗源碼 Vue響應式原理之defineReactive defineReactive 不論如何,最終響應式數據都要通過defineReactive來實現,實際要借助...
摘要:實際上,閉包和匿名函數是偽裝成函數的對象。容器流程淺析是社區中比較流行的容器。服務提供者服務提供者是連接容器與具體功能實現類的橋梁。服務提供者需要實現接口所有服務提供者必須實現接口方法。但已經完成了服務提供者的注冊工作。 需要具備的知識點 閉包 閉包和匿名函數在PHP5.3.0中引入的。 閉包是指:創建時封裝周圍狀態的函數。即使閉包所處的環境不存在了,閉包中封裝的狀態依然存在。 理論上...
摘要:一前言的垃圾回收機制使用垃圾回收機制來自動管理內存。垃圾回收器只會針對新生代內存區老生代指針區以及老生代數據區進行垃圾回收。分別對新生代和老生代使用不同的垃圾回收算法來提升垃圾回收的效率。 V8 實現了準確式 GC,GC 算法采用了分代式垃圾回收機制。因此,V8 將內存(堆)分為新生代和老生代兩部分。 一、前言 V8的垃圾回收機制:JavaScript使用垃圾回收機制來自動管理內存。垃...
摘要:任何一層報錯,都能用捕獲總結是一個非常輕量級的框架,只實現了中間件處理流程和對對象的封裝。其他的功能都由外部中間件提供。 koa 的中間件機制巧妙的運用了閉包和 async await 的特點,形成了一個洋蔥式的流程,和 JS 的事件流 (捕獲 -> target -> 冒泡) 相似 handleRequest(ctx, fnMiddleware) { const res ...
閱讀 1882·2021-11-11 16:55
閱讀 2064·2021-10-08 10:13
閱讀 739·2019-08-30 11:01
閱讀 2155·2019-08-29 13:19
閱讀 3277·2019-08-28 18:18
閱讀 2620·2019-08-26 13:26
閱讀 579·2019-08-26 11:40
閱讀 1864·2019-08-23 17:17