js一分鐘學會閉包

2022-09-06 07:39:09 字數 2947 閱讀 3918

一.js閉包理解

閉包的三大特點為:

1、函式巢狀函式

2、內部函式可以訪問外部函式的變數

3、引數和變數不會被**。

好了閉包就學完了,就這麼簡單。

那麼你一定很迷 接下來才是重點

常見的寫法

1.

//第1種寫法  

function circle(r)

circle.pi = 3.14159;

circle.prototype.area = function()

var c = new circle(1.0);

alert(c.area());

2.

//第2種寫法  

var circle = function()

return obj;

}

var c = new circle();

alert( c.area( 1.0 ) );

3.

//第3種寫法  

var circle = new object();

circle.pi = 3.14159;

circle.area = function( r )

alert( circle.area( 1.0 ) );

4.

//第4種寫法  

var circle=

};

alert( circle.area(1.0) );

二.閉包的作用

1、能夠訪問區域性變數或者方法

var fn = function() 

}var b = fn();

setinterval(function(),30)

2、在for迴圈中可以保留i的值

(重要的面試題)!!!

var ali = document.getelementbyid("list").getelementsbytagname("li");

for(var i=0;i(function(a)

})(i)

}

三.垃圾**機制

原理理解:

當乙個函式內部的一些方法或者屬性沒有在全域性進行呼叫的時候,當前函式執行完畢以後就會被**,下次在呼叫當前函式的時候函式內部的方法和屬性都會被重置,如果乙個函式的一些方法和屬性在全域性進行呼叫了,那麼當前函式不會被銷毀,下次在呼叫當前函式的時候裡面的方法和屬性不會進行重置。

簡單的說就是不管你在外面哪個城市裡面拼搏,只要一通你和你爸一通**(函式執行),你爸永遠都會在在家等你回去,哪怕你窮困潦倒,身無分文。

我想你一定理解了......

四.閉包的好處和壞處

好處1.匿名自執行函式(比如ui的初始化,那麼我們可以使用閉包)

var datamodel =     

};

(function(dm)

}

})(datamodel);

2.快取

var cachedsearchbox = (function(),    

count = ;

return

var fsb = new uikit.webctrl.searchbox(dsid);//新建

cache[dsid] = fsb;//更新快取

if(count.length > 100)

returnfsb;

},

clearsearchbox : function(dsid)

}

};

})();

3 實現封裝

var person = function(),    

setname : function(newname)

}

}();

print(person.name);//直接訪問,結果為undefined

print(person.getname());

person.setname("abruzzi");

print(person.getname());

得到結果如下:

undefined

default

abruzzi

4.物件導向

function person(),    

setname : function(newname)

}

};

var john = person();

print(john.getname());

john.setname("john");

print(john.getname());

var jack = person();

print(jack.getname());

jack.setname("jack");

print(jack.getname());

執行結果如下:

default

john

default

jack

參考:壞處1.記憶體消耗

於閉包引用另外乙個函式的活動物件,因此這個活動物件無法被銷毀,這意味著,閉包比一般的函式需要更多的記憶體消耗

2.效能問題

使用閉包時,會涉及到跨作用域訪問,每次訪問都會導致效能損失。

四.單例模式

未完待續。。。

一分鐘理解js閉包

什麼是閉包?先看一段 function a inc inc a 控制台輸出1,再輸出2 簡單吧。再來看一段 function a var c new a c.inc 控制台輸出1 c.inc 控制台輸出2 簡單吧。什麼是閉包?這就是閉包!有權訪問另乙個函式作用域內變數的函式都是閉包。這裡 inc 函...

一分鐘學會 docker

標題黨,其實僅僅是 docker 的發布而已。檢視當前執行的 docker docker ps a 停止 docker docker stop 容器 id 或者 tag 移除 docker docker rm 容器 id 檢視所有映象 docker images 移除映象 docker rmi 例如...

一分鐘sed入門(一分鐘系列)

1.簡介 sed是一種行編輯器,它一次處理一行內容。2.sed呼叫方式 sed options command file s sed options f scriptfile file s 第一種直接在命令列中執行,第二種把命令寫到了指令碼中,二者無本質區別。示例 1 列印hello.txt的內容 ...