這次帶給大家基礎的JavaScript知識總結,總共有十一個知識點,基礎的JavaScript知識總結(十)閉包、立即執行函數下面就是實戰案例,一起來看一下。
//例子function a() { function b(){ var bbb = 234; console.log(aaa) } var aaa = 123; return b; }var glob = 100;var demo = a(); demo();
首先這個函數在執行return b之後,函數就a執行完了,會銷毀a的AO,,但是在銷毀之前函數b被保存出來了,所以b的執行期上下文並沒有被銷毀。
所以b的AO、Go都被保存出來了
這樣就形成了閉包,也可以這樣說:內部函數被保存到了外部,一定形成閉包
function a (){ var num = 100; function b(){ num ++; console.log(num); } return b; }var demo = a(); demo();//打印101demo();//打印102
閉包的概念: 當內部函數儲存到外部時,將會產生閉包。閉包會導致原有作用域鏈不釋放,造成記憶體洩漏(記憶體佔用)
記憶體洩漏: 舉個例子....一個杯子...你往裡面到的水越多,他的記憶體越少(同理,你記憶體佔的越多,他的記憶體越少)
閉包的作用
實作公有變數
函數累加器
可以做快取(儲存結構)
eater
可以實作封裝,屬性私有化
Person()
模組化開發,防止污染全域變數
1、累加器上述例子已經寫了
2、可以做快取(儲存結構)
function test(){ var num = 100; function a(){ num ++; console.log(num); }; function b(){ num --; console.log(num); }; return [a,b] }var myArr = test(); myArr[0]();//打印101myArr[1]();//打印100 function eater(){ var food = ""; var obj ={ eat : function(){ console.log("i am eating" + food) }, push : function (myFood){ food = myFood; } } return obj; }var eater1 = eater(); eater1.push('banana'); eater1.eat();//打印出 i am eating banana
上面的這個例子我在eater1.push('banana')之後就給了eater裡面的foot = "",變成了food = "banana"。我在執行eater1.eat()之後就變成了拿到food = "banana" ,他們操作的都是同一個閉包,所以打印出i am eating banana,這個foot就相當於一個隱式的存儲結構一樣,這個就是快取的應用
給自己買個坑,屬性私有化,在我寫完物件之後在解釋,模組化開發也一樣
#立即執行函數
此類函數沒有宣告,在一次執行後即釋放。適合做初始化工作。
function a(){ }function b(){ }
我定義兩個函數,這兩個函數除非等到我JavaScript執行完,否則這兩個函數永遠都不的釋放,永遠等待被執行,等待被執行就佔空間。
作用 : 針對初始化功能的函數
(function (aaa,bbb,ccc){ var a = 234; var b = 123; var c = a+b; console.log(c) return c}(1,2,3)) 执行完立即被销毁 // 怎么去接收他var num = (function (aaa,bbb,ccc){ var a = 234; var b = 123; var c = a+b; console.log(c) return c}(1,2,3)) 立即执行函数有两种写法 //第一种(function(){}());//w3c 建议第一种//第二种(function(){})(); 扩展 只有表达式才可以被执行符号执行 var test = function (){}()//也可以被执行+ function test(){}()//也可以被执行 以此类推- !号也可以function test(){ console.log(a+b+c+d)}(1,2,3,4)//不执行也不报错
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
相關閱讀:
基礎的JavaScript知識總結(九)作用域、作用域鏈精簡
以上是基礎的JavaScript知識總結(十)閉包、立即執行函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!