匿名函式的幾種形式
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 匿名函式具有...