Secret of the JavaScript Ninja 学习笔记 - 5
2013-02-15 12:58
791 查看
第四章 Wielding functions
4.1 Anonymous functions
下面的代码演示了采用匿名函数的几个典型场景/** * Establish an anonymous function as event handler. There's no * need to create a named function only to reference it in * this location */ window.onload = function() {}; /** * Creates a function to be used as a method for ninja. We'll * be using the property named shot to invoke the function, so * it doesn't need its own name */ var ninja = { shout: function() { } }; /** * Passes a function to the setTimeout() function as a callback * to be invoked when the timer expires. Again, why bother to * give it an unneeded name? */ setTimeout(function() {});
4.2 Recursion
4.2.1 Recursion in named functions
/** * Declares a recursive chirping function that calls itself by name * until it determines that it's done. */ function chirp(n) { return n > 1 ? chirp(n-1) + "-chirp" : "chirp"; } chirp(3);
4.2.2 Recursion with methods
/** * Declares a recursive chirp function as a property of * the ninja object. We now need to call the method from * within itself using the reference to the object's method */ var ninja = { chirp: function(n) { return n > 1 ? ninja.chirp(n-1) + "-chirp" : "chirp"; } }; ninja.chirp(3);
4.2.3 The pilfered reference problem
The last example relied on the fact that we had a reference to the function to be called recursively in the property of an object. But unlike a function's actual name, such reference may be transient, and relying upon them can trip us up in confoundingways.
var ninja = { chirp: function(n) { return n > 1 ? ninja.chirp(n-1) + "-chirp" : "chirp"; } }; var samurai = { chirp: ninja.chirp }; ninja = {}; samurai.chirp();
4.2.4 Inline named functions
There's nothing wrong with giving any function literal a name, even those that are declared as callbacks or methods. These functions are called inline functions.var ninja = { chirp: function signal(n) { return n > 1 ? signal(n-1) + "-chirp" : "chirp"; } }; var samurai = { chirp: ninja.chirp }; ninja = {}; samurai.chirp();Even though inline functions can be named, those names are only visible within the functions themselves. It act somewhat like variable names, and their scope is limited to the function within which they're declared.
相关文章推荐
- Secret of the JavaScript Ninja 学习笔记 - 4
- Secret of the JavaScript Ninja 学习笔记 - 6
- Secret of the JavaScript Ninja 学习笔记 - 1
- Secret of the JavaScript Ninja 学习笔记 - 2
- Secret of the JavaScript Ninja 学习笔记 - 3
- secret of the javascript ninja笔记
- Eloquent JavaScript 笔记 六:The Secret Life of Objects
- JavaScript学习笔记-- The switch Statement
- ≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(三)
- JavaScript中prototype、constructor、hasOwnProperty()、isPrototypeOf()学习笔记
- ≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(七)
- 统计学习精要(The Elements of Statistical Learning)课堂笔记(二十一):SMO算法
- 统计学习精要(The Elements of Statistical Learning)课堂笔记(二十三):原型方法和最近邻KNN
- ≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(四)
- The key of C# 学习笔记I-II
- ≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(八)
- 统计学习精要(The Elements of Statistical Learning)课堂笔记(二十二):核函数和核方法
- 统计学习精要(The Elements of Statistical Learning)课堂笔记(二十四):聚类
- JavaScript:The Good Parts学习笔记1
- [在读]Secrets of the javascript Ninja