JavaScript中匿名函數的多種寫法,javascript匿名

來源:互聯網
上載者:User

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);自然就報錯了。。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.