日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

“约见”面试官系列之常见面试题第二十二篇之函数闭包(建议收藏)

發布時間:2023/12/9 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 “约见”面试官系列之常见面试题第二十二篇之函数闭包(建议收藏) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

1、概念

2、特點

3、閉包的創建:---

---------------------------------------------我是容易看懂的分界線-----------------------------------------------

4、閉包的應用場景

結論:閉包找到的是同一地址中父級函數中對應變量最終的值


1、概念

閉包函數:聲明在一個函數中的函數,叫做閉包函數。

閉包:內部函數總是可以訪問其所在的外部函數中聲明的參數和變量,即使在其外部函數被返回(壽命終結)了之后。

2、特點

? 讓外部訪問函數內部變量成為可能;

? 局部變量會常駐在內存中;

? 可以避免使用全局變量,防止全局變量污染;

? 會造成內存泄漏(有一塊內存空間被長期占用,而不被釋放)

3、閉包的創建:---

閉包就是可以創建一個獨立的環境,每個閉包里面的環境都是獨立的,互不干擾。閉包會發生內存泄漏,每次外部函數執行的時 候,外部函數的引用地址不同,都會重新創建一個新的地址。但凡是當前活動對象中有被內部子集引用的數據,那么這個時候,這個數據不刪除,保留一根指針給內部活動對象。

閉包內存泄漏為: key = value,key 被刪除了 value 常駐內存中; 局部變量閉包升級版(中間引用的變量) => 自由變量;

?

上面的都是什么鬼,是人話么,能看懂早就看懂了,生氣······

不過,答應我,看完例子再回看上面的概念,會理解的更!透!徹!

---------------------------------------------我是容易看懂的分界線-----------------------------------------------

4、閉包的應用場景

結論:閉包找到的是同一地址中父級函數中對應變量最終的值

最終秘訣就這一句話,每個例子請自行帶入這個結論!!!!!!!!!!!!!

/* 例子1 */

? function funA(){var a = 10; // funA的活動對象之中;return function(){ //匿名函數的活動對象;alert(a);}}var b = funA();b(); //10

/* 例子2 */

function outerFn(){var i = 0;function innerFn(){i++;console.log(i);}return innerFn;}var inner = outerFn(); //每次外部函數執行的時候,都會開辟一塊內存空間,外部函數的地址不同,都會重新創建一個新的地址inner();inner();inner();var inner2 = outerFn();inner2();inner2();inner2(); //1 2 3 1 2 3

/* 例子3 */

var i = 0;function outerFn(){function innnerFn(){i++;console.log(i);}return innnerFn;}var inner1 = outerFn();var inner2 = outerFn();inner1();inner2();inner1();inner2(); //1 2 3 4

/* 例子4 */

function fn(){var a = 3;return function(){return ++a;}}alert(fn()()); //4alert(fn()()); //4

/* 例子5 */

function outerFn(){var i = 0;function innnerFn(){i++;console.log(i);}return innnerFn;}var inner1 = outerFn();var inner2 = outerFn();inner1();inner2();inner1();inner2(); //1 1 2 2

/* 例子6 */

(function() {var m = 0;function getM() { return m; }function seta(val) { m = val; }window.g = getM;window.f = seta;})();f(100);console.info(g()); //100 閉包找到的是同一地址中父級函數中對應變量最終的值

/* 例子7 */

function a() {var i = 0;function b() { alert(++i); }return b;}var c = a();c(); //1c(); //2

/* 例子8 */

function f() {var count = 0;return function() {count++;console.info(count);}}var t1 = f();t1(); //1t1(); //2t1(); //3

/* 例子9 */

var add = function(x) {var sum = 1;var tmp = function(x) {sum = sum + x;return tmp;}tmp.toString = function() {return sum;}return tmp;}alert(add(1)(2)(3)); //6

/* 例子10 */

var lis = document.getElementsByTagName("li");for(var i=0;i<lis.length;i++){(function(i){lis[i].onclick = function(){console.log(i);};})(i); //事件處理函數中閉包的寫法}

/* 例子11 */

function m1(){var x = 1;return function(){console.log(++x);}}m1()(); //2m1()(); //2m1()(); //2var m2 = m1();m2(); //2m2(); //3m2(); //4

/* 例子12 */

var fn=(function(){var i=10;function fn(){console.log(++i);}return fn;})()fn(); //11fn(); //12/* 例子13 */function love1(){var num = 223;var me1 = function() {console.log(num);}num++;return me1;}var loveme1 = love1();loveme1(); //輸出224

/* 例子14 */

function fun(n,o) {console.log(o);return {fun:function(m) {return fun(m,n);}};}var a = fun(0); //undefineda.fun(1); //0a.fun(2); //0a.fun(3); //0var b = fun(0).fun(1).fun(2).fun(3); //undefined 0 1 2var c = fun(0).fun(1);c.fun(2);c.fun(3); //undefined 0 1 1

/* 例子15 */

function fn(){var arr = [];for(var i = 0;i < 5;i ++){arr[i] = function(){return i;}}return arr;}var list = fn();for(var i = 0,len = list.length;i < len ; i ++){console.log(list[i]());} //5 5 5 5 5

/* 例子16 */

function fn(){var arr = [];for(var i = 0;i < 5;i ++){arr[i] = (function(i){return function (){return i;};})(i);}return arr;}var list = fn();for(var i = 0,len = list.length;i < len ; i ++){console.log(list[i]());} //0 1 2 3 4

本面試題為前端常考面試題,后續有機會繼續完善。我是歌謠,一個沉迷于故事的講述者。

歡迎一起私信交流。

“睡服“面試官系列之各系列目錄匯總(建議學習收藏)?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的“约见”面试官系列之常见面试题第二十二篇之函数闭包(建议收藏)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。