**函數是一種數據類型。**
~~~
function f(){
return 1;
}
___________
//函數標識記法
var f=function {
return 1;
}
~~~
匿名函數
適合執行一次性或初始化的任務。
**回調函數**
將函數A傳遞給函數B,并由B來執行A時,A就成了一個回調函數。
若A是匿名函數,則稱為匿名回調函數。
使用場合:
不做命名的情況下,傳遞函數。,可節省全局變量。
可將一個函數調用委托給另一個函數,意味著可節省代碼編寫。
提高性能。

~~~
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]
~~~

**自調函數**
~~~
(
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()
~~~