匿名函式和閉包

2021-08-03 08:59:21 字數 1578 閱讀 2133

匿名函式

匿名函式和普通函式

function

box()

alert(box());

閉包概念

閉包是指有權訪問另乙個函式作用域中的變數的函式,建立閉包的常見的方式,就是在乙個函式內部建立另乙個函式,通過另乙個函式訪問這個函式的區域性變數。

閉包作用

使用閉包有乙個優點,也是其缺點。可以把區域性變數駐留在記憶體中,可以避免使用全域性變數。因為全域性變數汙染導致程式不可**性,可能引起災難,所以推薦使用私有的,封裝的區域性變數。

關於this物件

this物件是在執行時基於函式的執行環境繫結的,如果this在全域性範圍則為window,如果在物件內部則指向這個物件。閉包卻在執行時指向window,因為閉包並不屬於這個物件的屬性和方法。

可以用下面**測試一下

var box=

}}alert(box.) //

alert(box.getthis()) // 返回裡面的閉包函式

alert(box.getthis()()) //[object window]

var user='the window';

var box=

}}alert(box.getuser()()); //列印出『the window'

如何閉包裡面的 this指向的是』the box』

方法一:物件冒充(目前是全域性變數,冒充為bo物件)

alert(box.getuser().call(box));  //'the box'
方法二:使用作用域鏈,將(1)處的作用域給(2)處作用域

var user='the window';

var box=

}}alert(box.getuser()()); //列印出『the window'

閉包使用

函式裡面放乙個匿名函式,產生閉包,通過閉包返回區域性變數

function

box()

}alert(box); //整個函式

alert(box()); //裡面的小函式

alert(box()()); //lee

通常呼叫方法

var b=box();   //得到 裡面的 小函式

b();//lee

實現私有作用域(塊級作用域)

作用:使用了塊級作用域後,匿名函式中定義的任何變數,都會在執行結束時被銷毀,這種技術經常在全域性作用域中被用在函式外部,從而限制向全域性作用域新增過多的變數和函式。一般來說,我們應該盡可能減少向全域性作用域中新增變數和函式。過多的全域性變數和函式很容易導致命名衝突。引用塊級作用域,使得每個開發者既可以使用自己的變數,又不必擔心搞亂全域性作用域。

包含自我執行的匿名函式,可以實現私有作用域。

(function

()})();

alert(i);//undefined i在上面自我執行完之後,會被立即銷毀;

閉包和匿名函式

匿名函式 沒有函式名稱的函式 這就是匿名函式 function argument1,argument2 閉包 乙個可以使用另外乙個函式作用域中的變數的函式。如下面的 函式b就是閉包,但是這個前提是 當函式a的內部函式b被函式a外的乙個變數引用的時候,就建立了乙個我們通常所謂的 閉包 意思是說b要變成...

閉包和匿名函式

閉包是指在建立時封裝周圍狀態的函式.即便閉包所在的環境不存在了,閉包中封裝的狀態依然存在.匿名函式其實就是沒有名字的函式 從理論上講閉包和匿名函式是不同的概念.但是php將其視作為相同的概念 注意 閉包和匿名函式其實是偽裝成函式的物件.如果審查php閉包或匿名函式,會發現它們是closure類的例項...

匿名函式和閉包

匿名函式 function 匿名函式不能呼叫,要呼叫可以通過下述方法 1 把匿名函式賦值給變數 var box function alert box lee 2 通過自我執行來執行匿名函式 匿名函式 var box function alert box lee alert function age ...