Javascript匿名函数
ü? 定義
匿名函數(shù)的定義非常簡單:就是沒有名字的函數(shù)。但是其用途非常的大
ü? 典型的函數(shù)定義方式
在看匿名函數(shù)之前我們先看下在Javascript中定義一個函數(shù)比較典型的幾種方式
- 函數(shù)聲明  function functionName(args) { //函數(shù)體 } 
- 函數(shù)表達(dá)式   var functionName = function (args) {//函數(shù)體 } 
函數(shù)聲明與函數(shù)表達(dá)式的區(qū)別:
- 函數(shù)聲明會在任何代碼執(zhí)行以前被加載到作用域
- 函數(shù)表達(dá)式則是在代碼執(zhí)行到那一行的時候才會有定義
例如:
<script language="javascript" type="text/javascript">func1(); //已加載 function func1() {alert('已加載');}alert(func2);//undefinedvar func2 = function () {alert("還未加載");}func2(); //還未加載</script>
那么在函數(shù)聲明會給函數(shù)指定一個名字,而函數(shù)表達(dá)式則是創(chuàng)建一個匿名函數(shù),原后將函數(shù)賦值一個變量,這個變量就指向了這個函數(shù)。
ü? 匿名函數(shù)常用調(diào)用方式
定義一個匿名函數(shù)如下:
function(x, y, z) {return x + y + z; }
以上匿名函數(shù)沒有名字,那么誰也不可能調(diào)用這個函數(shù),因?yàn)闆]有指向這個函數(shù)的指針,我們可以像下面這樣的方式調(diào)用匿名函數(shù)
- 直接調(diào)用  var result = function (x, y, z) {return x + y + z; }(1,2,3) 
- 將函數(shù)賦值給變量(如上函數(shù)表達(dá)式方式)
在Javascript中允許有兩種方式調(diào)用函數(shù),第一種就是典型的函數(shù)調(diào)用:函數(shù)名(函數(shù)參數(shù)列表),另一種方式是將函數(shù)作為表達(dá)式:(用函數(shù)作為表達(dá)式)(參數(shù)列表)
比如上例中可以這樣調(diào)用
1. (func1)() 2. ( function (x, y, z) { return x + y + z; })()
?
ü? 匿名函數(shù)的常用法
?例1:四則運(yùn)算
/* 四則運(yùn)算 */var fourOperations = function (fn, x, y) {return fn(x, y);}var add = function (x, y) {return x + y;}alert(fourOperations(add, 10, 20));alert(fourOperations(function (x, y) {return x * y;}, 10, 20));
例2:復(fù)雜對象數(shù)組的排序
在看復(fù)雜對象排序之前我們先來看下簡單的數(shù)組排序
a.簡單數(shù)組排序
/* 數(shù)組排序 */var person1 = ["cnblog", "abc", "def", "cx"];person1.sort();alert(person1);
? 在默認(rèn)情況下,sort排序按升序排列數(shù)組項(xiàng),排序過程中首先會調(diào)用項(xiàng)的toString()方法,原后比較得到的字符串。
?
? b.復(fù)雜數(shù)組排序
/* 定義復(fù)雜對象 */function Person(name, age) {this.name = name;this.age = age;}Person.prototype.toString = function () {return "name: " + this.name + " age: " + this.age;}/* 初始化數(shù)組 */var person = [new Person("cnblog", 25),new Person("abc", 30), new Person("def", 26), new Person("cx", 31)];/* 直接使用匿名函數(shù)來進(jìn)行排序 */person.sort(function (value1, value2) { return value1.name > value2.name ? 1 : -1; });alert(person);/* 改進(jìn)排序方式 */person.sort(sortFunction("age"));alert(person);// function showSortResult(person) {// var result = "";// for (var i = 0, length = person.length; i < length; i++) {// result += ("name:" + person[i].name + " age:" + person[i].age + "\r\n");// }// alert(result);// }function sortFunction(property) {return function (value1, value2) {return value1[property] > value2[property] ? 1 : -1;}}
? 對于復(fù)雜對象的操作在實(shí)際應(yīng)用中是相當(dāng)常見的,例如在對json對象進(jìn)行排序時就可以使用上面的方法。
3.利用匿名函數(shù)構(gòu)建“塊級作用域”,這個留著在講作用域時再細(xì)講
當(dāng)然匿名函數(shù)的作用很多,也歡迎大家分享自己的一些實(shí)戰(zhàn)經(jīng)驗(yàn)
?
注:第一篇技術(shù)文章,多支持
轉(zhuǎn)載于:https://www.cnblogs.com/Latitude/archive/2012/04/21/2461304.html
總結(jié)
以上是生活随笔為你收集整理的Javascript匿名函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 胃癌治愈最少要花多少钱
- 下一篇: 大地在颤抖是什么歌?
