TAG

首都機能移轉 (2) 歌詞 (2) 靠北文 (40) 戲言 (30) 糟糕 (7) ACG (23) Assembly (2) Boost (2) C (31) C++ (69) CMake (4) CSIE (67) Debian (34) Design_Pattern (2) Django (1) Eclipse (1) en_US (13) FFmpeg (3) FoolproofProject (26) FreeBSD (2) Git (4) GNU_Linux (65) IDE (5) Java (11) JavaScript (19) KDE (15) Khopper (16) KomiX (3) Kubuntu (18) Life (1) Lighttpd (2) Mac_OS_X (2) Opera (1) PHP (2) PicKing (2) Programing (21) Prolog (1) Python (7) QSnapshot (2) Qt (30) Qt_Jambi (1) Regular_Expression (1) Shell_Script (7) Talk (98) VirtualBox (7) Visual_Studio (13) Windows (18) zh_TW (36)

2009年4月9日 星期四

Recursive anonymous function

JavaScript 在每個 Function 都維持了一個變數叫 arguments,可以取得 context 的有趣資訊。比如說,arguments.callee 可以拿到目前正在執行的這個 Function 的實體,這有什麼用呢?它可以用來自殺(?),以及實現匿名函式的遞迴。
以自殺來說,比方現在你註冊一個監聽函式,而你需要在某個條件達成後解除監聽,這就很有用了:
ele.addEventListener( 'click', function( e ) {
    // blah blah ...
    this.removeEventListener( 'click', arguments.callee, false );
    // blah blah ...
}, false );
而遞迴就更有趣了,雖然應用上應該很少用到:
alert( ( function( n ) {
    return ( n <= 1 ) ? n : n + arguments.callee( n - 1 );
} )( 100 ) );
以上會跳出 5050。

沒有留言:

張貼留言