**函数是一种数据类型。**
~~~
function f(){
return 1;
}
___________
//函数标识记法
var f=function {
return 1;
}
~~~
匿名函数
适合执行一次性或初始化的任务。
**回调函数**
将函数A传递给函数B,并由B来执行A时,A就成了一个回调函数。
若A是匿名函数,则称为匿名回调函数。
使用场合:
不做命名的情况下,传递函数。,可节省全局变量。
可将一个函数调用委托给另一个函数,意味着可节省代码编写。
提高性能。
![](https://box.kancloud.cn/335fba7630d0759177a05e6358126632_190x158.png)
~~~
function multiplyByTwo(a, b, c, callback) {
var i, ar = [];
for (i = 0; i < 3; i++) {
ar[i] = callback(arguments[i] * 2);
}
return ar;
}
function addOne(a) {
return a + 1;
}
myarr = multiplyByTwo(1, 2, 3, addOne);
// [3, 5, 7]
匿名函数
myarr = multiplyByTwo(1, 2, 3, function(a){return a+1});
//[3, 5, 7]
可根据需要调整代码
myarr = multiplyByTwo(1, 2, 3, function(a){return a+3});
//[5, 7, 9]
~~~
![](https://box.kancloud.cn/071cb7fd0226c8ae5cf88bdae157f72f_331x217.png)
**自调函数**
~~~
(
function() {
alert(1);
}
)()
~~~
第二对括号起到立即调用的作用,同时也是向匿名函数传递参数的地方。
~~~
(
function(name){
alert('hello '+name+'!');
}
)('qwe')
~~~
**内部(私有)函数**
好处:
确保全局名字空间的纯净性;
私有性。
**返回函数的函数**
~~~
function a() {
alert(2);
return function() {
alert(3);
};
}
a()()
~~~
**能重写自己的函数**
执行一次性初始化工作 的函数。
~~~
var qq = function() {
function aa() {
var we = '456'
};
function bb() {
alert('ui')
};
aa();
return bb;
}();
qq()
~~~