首頁  >  文章  >  web前端  >  基礎的JavaScript知識總結(十)閉包、立即執行函數

基礎的JavaScript知識總結(十)閉包、立即執行函數

php中世界最好的语言
php中世界最好的语言原創
2018-03-10 13:39:191238瀏覽

這次帶給大家基礎的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知識總結(八)預先編譯執行過程

基礎的JavaScript知識總結(七)遞歸

以上是基礎的JavaScript知識總結(十)閉包、立即執行函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn