做用域和閉包以及自執行函數
做用域
做用域分爲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
以上就是變量做用域和閉包以及自執行函數的介紹