在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML5  HTML/ 前端最疑惑的面試題:請講出你在工作中使用閉包的例子?求給個例子

前端最疑惑的面試題:請講出你在工作中使用閉包的例子?求給個例子

閉包在工作中的使用例子,這是面試官問我的,說實話,工作中我基本沒用過,但是我知道閉包的原理。說起使用場景,我還真不知道。求大神指點些例子。

回答
編輯回答
淺時光

使用閉包要么是為了訪問函數(shù)內(nèi)部的變量、要么是為了將一個變量保存在內(nèi)存中,或者保護函數(shù)內(nèi)部變量;
1、平時在我們封裝功能函數(shù)時,為了不讓全局變量混亂,污染全局作用域,這時候可以使用閉包代替全局變量(JQuery內(nèi)部的封裝就是如此);
2、還有常用的就是為了創(chuàng)建出類似塊級作用域(即為一個nodelist對象列表中的每一個元素綁定事件時);
3、高價函數(shù)的使用也是有所體現(xiàn)的。
…………平時我們使用閉包的方面還是比較多的,不知不覺中其實你就已經(jīng)創(chuàng)建了閉包

2018年2月3日 13:47
編輯回答
莓森

工作中閉包的使用很多,比如:函數(shù)柯里化、函數(shù)節(jié)流啦。點擊事件里面操作函數(shù)啦

2018年8月30日 22:31
編輯回答
冷溫柔

最早的jq 都是用閉包的寫法

2017年11月23日 08:09
編輯回答
巴扎嘿

用javascript 寫回掉

2018年2月1日 16:37
編輯回答
咕嚕嚕

閉包你應(yīng)該天天都在用,js的模塊就是用閉包實現(xiàn)的,隨意拆出一個webpack打包的js中的模塊

/***/ (function(module, exports, __webpack_require__) {
"use strict";
console.log('555555');
/***/ })
2017年11月10日 22:57
編輯回答
玩控

閉包可以保證內(nèi)存常駐,所有和內(nèi)存常駐有關(guān)的都可以用閉包,比如循環(huán)中的結(jié)果數(shù)據(jù)緩存,比如網(wǎng)站訪問統(tǒng)計。

2017年9月7日 00:31
編輯回答
任她鬧

首先,可能題主把閉包看得太狹義了,有些常見模式其實也是閉包。不過,平心而論,以前典型的閉包用法(存狀態(tài))現(xiàn)在確實廢棄了。

是什么

閉包的定義是“函數(shù)和聲明該函數(shù)的詞法環(huán)境的組合” MDN,換言之,就是帶著環(huán)境(上下文、狀態(tài)、屬性、局部變量,找一個你能理解的詞)的函數(shù)。從ES2015起,最簡單的閉包變成了這樣:

{
  let localVar = 1;
  whatever.onclick = () => localVar++;
}

whatever.onclick就是一個閉包,因為它帶著localVar

從這個角度上來說,所有Javascript函數(shù)都是閉包,因為他們都能訪問到window下面的全局變量,如果傳遞給另一個框架的話,用的都是自帶的全局變量環(huán)境。

為啥不用了

上面的閉包非常糟糕,糟糕就在于它不是純函數(shù),它是有狀態(tài)的。分散在各個閉包中的狀態(tài)會成為bug的溫床。以foo為例,每次調(diào)用都會有副作用,得到的值都不一樣,狀態(tài)在哪里又找不著(假設(shè)你忘了localVar是啥),給debug造成極大的困難。

現(xiàn)在主流的狀態(tài)管理框架Flux/Redux/Vuex的思想全都是集中狀態(tài)管理。還把狀態(tài)分散到一個一個閉包里面,是過時的。

那我們把狀態(tài)保存在哪里?this里。

雖然this也是JS的一個天坑,但是比起閉包來,簡直好太多了。this最偉大的功勛就在于函數(shù)和環(huán)境的解耦(跟閉包正好相反)。

let bar = function() { this.a++ }
let state = { a: 1, bar };

這個時候有同學(xué)就要問了,state.bar()還是有副作用的呀,得到的值還是不一樣,好處在哪?好處在于

  1. bar前面是什么?是一個對象state,我們現(xiàn)在能確定bar的副作用在哪里了;
  2. bar本身沒有副作用,只要我們深拷貝state,我們就能歷史回放state.bar()是怎么出bug的。

以上兩點簡直是debug的福音。

所以,React強推class,Vue用的也是this,都用對象存狀態(tài)。既然狀態(tài)都被對象存了,以前典型的閉包用法(存狀態(tài))自然就廢棄了。

https://segmentfault.com/a/11...

2017年1月6日 00:12