JavaScript中匿名函數的多種寫法,javascript匿名
匿名函數沒有實際名字,也沒有指標,怎麼執行滴?
其實大家可以看看小括弧的意義就應該可以理解。小括弧有返回值,也就是小括弧內的函數或者運算式的返回值,所以說小括弧內的function返回值等於小括弧的返回值,不難理解 (function(){})()可以將沒有名字的函數執行了把…
關於匿名函數寫法,很發散~
最常見的用法:
代碼如下:
(function() {
alert('water');
})();
當然也可以帶參數:
代碼如下:
(function(o) {
alert(o);
})('water');
想用匿名函數的鏈式調用?很簡單:
代碼如下:
(function(o) {
alert(o);
return arguments.callee;
})('water')('down');
常見的匿名函數都知道了,看看不常見的:
代碼如下:
~(function(){
alert('water');
})();//寫法有點酷~
代碼如下:
void function(){
alert('water');
}();//據說效率最高~
代碼如下:
+function(){
alert('water');
}();
代碼如下:
-function(){
alert('water');
}();
代碼如下:
~function(){
alert('water');
}();
代碼如下:
!function(){
alert('water');
}();
代碼如下:
(function(){
alert('water');
}());//有點強制執行的味道~
那為什麼加上這些符號呢?弄清這個問題需要弄清函數運算式(function expression)和函式宣告(function declaration)的區別:
函數運算式:
/* 函數運算式中的函數可以為匿名函數,也可以有函數名,但是該函數實際上不能直接使用,只能通過運算式左邊的變數 a 來調用。*/
var a = function(){
alert('Function expression');
}
var b = new a();
函式宣告:
// 函式宣告時必須有函數名
function a(){
alert('Function declaration');
}
a();
而這段代碼:
<script>
~function() {
alert("hello, world.");
}
();
</script>
實際上可以分為兩個部分(黑體部分和斜體部分)。黑體部分的匿名函數通過一元操作符變成了函數運算式,因而可以通過 () 來調用。
因此,執行匿名函數可以通過+,-,!,() 這樣的形式來轉化為函數運算式,就可以通過()來運行了。
匿名函數的好處在於:可以減少局部變數,以免汙染現有的運行環境。jQuery等庫都用到了這樣的原理。
另外:通過+,-,!這三個符號啟動並執行匿名函數比()啟動並執行匿名函數可以減少一個字元的使用。所以那些匿名函數附近使用括弧或一些一元運算子的慣用法,就是來引導解析器,指明運算子附近是一個運算式。
按照這個理解,可以舉出五類,超過十幾種的讓匿名函數運算式立即調用的寫法:
( function() {}() );( function() {} )();[ function() {}() ];~ function() {}();! function() {}();+ function() {}();- function() {}();delete function() {}();typeof function() {}();void function() {}();new function() {}();new function() {};var f = function() {}();1, function() {}();1 ^ function() {}();1 > function() {}();// ...
本文到此結束!
Javascript匿名函數定義及舉例?
就是沒有函數名的函數,一經定義,無法被其它程式段使用(因為沒有函數名)
舉例:
var a;
a.b = function(){alert('hello');}
這時你要調用那個函數,就必須用a.b的方式訪問,而不像普通的函數,
在c#2.0也有匿名函數,
javascript 匿名函數參數問題
第一次執行的是function裡的內容,因為function(){}()的作用是執行這個函數,至於為什麼報錯。。
因為執行完的傳回值是undefined,相當於setInterval(undefined,1000);自然就報錯了。。