• 匿名函数
• 回调函数
• 递归函数
• 构造函数
1、匿名函数
定义时候没有任何变量引用的函数
匿名函数自调:函数只执行一次
(function(a, b){ console.log(a + b);} )(1, 2); // 等价于 function foo (a, b){ console.log(a + b); } foo(1, 2);
jQuery:
(function(window, undefined){ var jQuery; ... window.jQuery = window.$ = jQuery; })(window);
优点:节约内存空间,掉用前和调用后内存中不创建任何函数对象
2、回调函数callback
如果一个函数作为对象交给其他函数使用
var arr = [33, 9, 11, 6]; arr.sort(function (a, b) { return a - b; }); console.log(arr); // [6, 9, 11, 33]
异步回调
function getPrice(params, callback){ $.ajax({ url: '/getPrice', type: 'POST', data: params, success: function(data){ callback(data); } }) }
3、递归函数
循环调用函数本身
var func = function(x) { if(x === 2){ return x } else{ return x * f(x - 1) } }
arguments.callee 严格模式下不支持使用 use strict
function func(x){ if(x === 1){ return 1 } else{ return x * arguments.callee(x -1) } }
4、构造函数
构造函数习惯上首字母大写
调用方式不一样,作用也不一样
构造函数用来新建实例对象
Person 既是函数名,也是这个对象的类名
function Person(){} // 构造函数 new Person() function person(){} // 方法