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