javascipt之匿名函式和閉包

2021-07-10 19:21:53 字數 2335 閱讀 4013

匿名函式的幾種形式

function

()(function

box())(); //()表示執行函式,並且傳參

var box = function

() ;

alert(box()); //呼叫方式和函式呼叫相似

function

box()

}alert(box()()); //呼叫匿名函式

當在乙個函式中定義另乙個函式時,就會產生閉包。內層函式和外層函式所包含的區域性變數(即外層函式的上下文變數)構成閉包。使用閉包有乙個優點,也是它的缺點:就是可以把區域性變數駐留在記憶體中,可以避免使用全域性變數。

使用閉包實現變數的累加,

function

plus

() }

var p=plus(); //變數p指向函式plus

alert(p());

alert(p());

迴圈裡包含匿名函式:

function

loop

(); }

return arr;

}var lo =loop();

alert(lo.length); #顯示5

for (var i = 0; i < lo.length; i++)

#首先看loop函式的返回值,lo[0]儲存的是function

(),同理lo陣列中其他幾個值儲存的也應該是相同的值,當loop函式返回值的時候,此時的i已經變成了5,而返回值中儲存的卻是i,所以當我們使用lo[i]()對它們分別進行列印時,值都是5。

現在將以上**改為自我執行的匿名函式。

function

loop

())(i);

}return arr;

}var lo =loop();

for (var i = 0; i < lo.length; i++)

#此時輸出為0,1,2,3,4.當loop函式進行第一次迴圈時,此時arr[0]的值為匿名函式的返回值,而不是上例中匿名函式本身,所以返回了我們想要的結果

閉包和this物件

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

var user = 'the window';

var obj = ;}};

//閉包不屬於obj,裡面的this 指向window,所以返回值為the window

作用域
for (var i=0; i<2; i++) {}

alert(i);

#在其他語言中,直譯器可能會提示i未宣告,但在js中因為沒用塊級作用域,所以會輸入2,

雖然在{}中沒有塊級作用域,但是js可以通過自我執行的匿名函式來實現

(function

() })

()alert(i)

;

#此時將會報錯,無法列印i,使用了塊級作用域(私有作用域)後,匿名函式中定義的任何變數,都會在執行結束時被

銷毀

私有變數:任何在函式中定義的變數,都可以認為是私有變數,因為不能在函式的外部訪問這些變數。上例中,通過自我執行的匿名函式實現的塊級作用域就時通過這種方式。

為了使外部可以訪問私有變數,

var name =222;

function

box()

alert(this.name)

this.get = function

() ;

}box();

alert(this.get());

#此時列印的值為222,所以此函式中的this指向的是window物件,然後我們通過在此函式中將匿名函式賦給window物件屬性的方式來獲得私有變數。

#將會輸出100執行中...,

#如果我們將呼叫方式改為

var box = new box();

alert(box.get());

#此時的name值將是udifend的,而get輸出則正常,var box = new box();執行此行**時,我們建立了乙個物件,此時box中的this將指向此物件,而這個物件中是沒有name屬性的,它只有get這乙個屬性,在函式宣告時的var name=111;是函式的屬性,並不是物件的屬性,

javascipt字串函式

var str assddsddsad console.log str.charat 3 d console.log str.charat 20 什麼沒有 空 var str assddsddsad console.log str.charcodeat 3 100 console.log str.c...

Python 之匿名函式和偏函式

python允許使用lambda關鍵字創造匿名函式,lambda表示式用於定義匿名函式,它返回可呼叫的函式物件,語法如下 lambda arg1,arg2,expression 例如 add lambda a,b 2 a b print add 3 5print add 3,10 13 匿名函式具有...

Python 之匿名函式和偏函式

python允許使用lambda關鍵字創造匿名函式,lambda表示式用於定義匿名函式,它返回可呼叫的函式物件,語法如下 lambda arg1,arg2,expression 例如 add lambda a,b 2 a b print add 3 5print add 3,10 13 匿名函式具有...