1.函數(shù)實(shí)際上是對(duì)象
2.函數(shù)的定義:
1.函數(shù)申明語法定義:
function sun {
/*......*/
}
2.函數(shù)表達(dá)式定義:
var sun = function() {
/*......*/
};//函數(shù)末尾有分號(hào),就像定義變量一樣
3.函數(shù)對(duì)象的length屬性是其聲明的參數(shù)的個(gè)數(shù)
舉個(gè)例子:
function a(b,c){
/*.....*/
}
a.length; //2
4.函數(shù)沒有重載,函數(shù)提升
如果同時(shí)聲明兩個(gè)名字一樣的函數(shù),后一個(gè)會(huì)覆蓋前一個(gè)函數(shù)
function sum(){
console.log(10)
};
sum();
function sum (){
console.log(20)
}
sum();

以上結(jié)果證實(shí),函數(shù)無法重載,后一個(gè)會(huì)覆蓋前一個(gè);
可能會(huì)有人產(chǎn)生疑惑??,為什么第一sum()執(zhí)行結(jié)果也是20,那是因?yàn)镴S中的解析器會(huì)率先讀取函數(shù)聲明(也可以理解為函數(shù)聲明提升)的過程;但是,函數(shù)表達(dá)式就沒有這個(gè)待遇,它無法被JS引擎提升到頂部;
舉另一個(gè)例子(用函數(shù)表達(dá)式定義函數(shù)):
var sum = function(){
console.log(10)
};
sum();
var sum = function (){
console.log(20)
}
sum();
結(jié)果如下:

這時(shí)兩個(gè)sum()調(diào)用后,就呈現(xiàn)出不同的結(jié)果了。
5.根據(jù)屬性名來創(chuàng)建一個(gè)比較函數(shù)
舉個(gè)例子:
function createComparisonFunction(propertyName){
return function(object1,object2){
var value1 = object1[propertyName];
var value2 = object2[propertyName];
if(value1<value2){
return -1;
}else if (value1 > value2){
return 1;
}else{
return 0;
}
};
}
var data = [{name:"zzzzz",age:"11"},{name:"wef",age:"18"},{name:"wef",age:"10"}];
data.sort(createComparisonFunction("age"));
alert(data[0].age);
結(jié)果如下:

6.函數(shù)內(nèi)部屬性
在函數(shù)內(nèi)部,有兩個(gè)特殊的對(duì)象,arguments 和 this。
arguments:
其中arguments又一個(gè)叫callee的屬性,該屬性是一個(gè)指針,指向擁有這個(gè)arguments對(duì)象的函數(shù);
舉個(gè)例子:
一般的階乘函數(shù)(在函數(shù)體內(nèi)調(diào)用函數(shù)本身):
function factorial (num){
if(num <= 1){
return 1;
}else{
return num * factorial(num-1);
}
}
console.log(factorial(3)); //6
利用 arguments.callee 的階乘例子:
function factorial (num){
if(num <= 1){
return 1;
}else{
return num * arguments.callee(num-1);
}
}
console.log(factorial(3));//6
this:
this 引用的是函數(shù)執(zhí)行的環(huán)境對(duì)象(當(dāng)在網(wǎng)頁的全局作用域中調(diào)用函數(shù)時(shí),this對(duì)象引用的就是windows)
一個(gè)例子:
window.color = "red";
var o = {color : "blue"};
function sayColor(){
alert(this.color);
}
sayColor();//red
o.sayColor = sayColor;
o.sayColor(); //blue
以上例子中,sayColor()是在全局作用域中定義的,它引用了this對(duì)象,所以this指向的是全局對(duì)象;換句話說“this.color”會(huì)被轉(zhuǎn)換為"window.color";返回結(jié)果“red”; 而把這個(gè)函數(shù)賦值給對(duì)象o時(shí),并調(diào)用o.sayColor() ,這里的this,color會(huì)轉(zhuǎn)換成o.color;返回結(jié)果“blue” ;