什麼是閉包,變量的做用域和自執行函數

做用域和閉包以及自執行函數

做用域

做用域分爲2種

一、全局做用域

全局做用域就是在js的任何位置都能訪問過

二、函數做用域

只能在函數裏面調用的稱之爲函數做用域

閉包

嵌套在函數裏面的函數及周邊的變量叫閉包

閉包存在的問題是:周邊變量不會被釋放,常駐內存中
閉包的缺點:消耗內存

下面咱們作一個閉包的示例

在函數中咱們調用另外一個函數,讓第二個函數
/閉包
function test(){
    var b = 2;
   return function(){
        var c = 3;
        console.log(b);
    }
}
var new1 = test();
new1();
打印結果獲得的是2
下面咱們在調用一次new1()
function test(){
    var b = 2;
    return function(){
        var c = 3;
        console.log(b);
    }
}
var new1 = test();
new1();  new1();
打印的結果是2 2
由此咱們獲得一個結論,咱們要想打印下面這個函數的結果,咱們就用閉包作
function test(){
    var b = 2;
}
var new1 = test();
new1();
咱們剛纔說到閉包存在的問題是:周邊變量不會被釋放,常駐內存中下面咱們舉例說明
function test(){
    var b = 2;
   return function(){
        b++            
        console.log(b);
    }
}
var new1 = test();
new1();new1();
打印的結果是3 4
咱們在調用一個函數
function test(){
    var b = 2;
   return function(){
        b++            
        console.log(b);
    }
}
var new1 = test();
new1();new1(); new1();
如今的輸出結果是 3 4 5

自執行函數(當即執行函數)

自執行函數有2中寫法

//第一種寫法
(function (){
    console.log(1);
})();
//第二種寫法
(function (){
    console.log(2)
}());
自執行函數也是也是一個閉包
var aa =  (function (){
    var a = 55;
    function test(){
        a++;
        console.log(a);
    }
    return test;
})();
aa();aa();
打印結果56 57

以上就是變量做用域和閉包以及自執行函數的介紹

相關文章
相關標籤/搜索