函數
經由過程函數能夠封裝恣意多條語句,能夠在任何地方,任何時刻挪用實行。每一個函數都是function
範例的實例,和其他援用範例一樣具有屬性和要領。
把函數保留為對象中的一個屬性時,該屬性稱之為要領。
函數聲明語法體式格局
一般聲明體式格局
function sum (){
return num1 + num2;
}
運用變量初始化函數
var sum = function(num1,num2){
return num1 + num2;
}
運用function
組織函數,這類要領不引薦。這類要領便於明白“函數是對象,函數名是指針”的觀點。
var sum = new Function("num1","num2","return num1 + num2");
delete
可刪除屬性,用法delete.a.name
作為值的函數
任何函數在任何時刻都能夠經由過程return
語句來返回值。須要注重的是位於return
語句以後的一句語句永久不會實行。
挪用函數(要領)假如沒有圓括號,會打印函數代碼,有括號才會打印函數值。
function sum(num1,num2){
return num1 + num2; //返回 num1 + num2 相加的和
alert("Hello world!"); //永久也不會實行
}
函數參數
聲明函數時沒有給參數,但挪用函數時會傳參。
函數內部可用argument
要領獵取,合營length
運用可動態傳參。
function sum(){
if(arguments.length == 1){
alret(arguments[0] + 10);
}else if(arguments.length == 2){
alert(arguments[0] + arguments[1] + 10);
}
}
sum(10) //打印20
sum(10,20) //打印40
JavaScript 函數沒有重載
重載是依據參數,挑選雷同函數名而參數差別的函數。
階乘函數
function factorial(){
if(num < 1){
return 1;
}else{
return num * arguments.callee(num -1);//arguments.callee挪用本身函數。這裏挪用的是factorial函數。
}
}
this
this
援用的是函數實行的環境對象,也就是函數挪用語句所處的誰人作用域。當網頁在全局作用域中挪用函數時,這個this
對象援用的就是window
。window
是一個對象,而且是JS
里最大的對象,是最外圍的對象。
var color = "red"; //這裏color是全局變量,而這變量又是window的屬性
alert{window.color}; //打印"red",這說明color是window下的屬性
alert(this.color); //同上
window.color = "red"; //相當於 var color = "red"
alert(this.color); //打印"red"
var o ={
color: "blue"; //這裏的color是o下的屬性,也就是部分變量
sayColor: function(){
alert(this.color); //這裏的this代表的是o對象
}
};
o.sayColor(); //打印"blue"
下面的代碼實在和上面是一樣的,只是將sayColor()
函數作為要領賦值給o
,然後在經由過程o
來挪用它
window.color = "red"; //全局
var o = {color: "blue"}; //部分
function sayColor(){
alert(this.color); //這裏實行的時刻是動態的,第一次指向window,第二次指向sayColor
}
sayColor(); //打印"red",由於這裡是在window下的
o.sayColor = sayColor; //這裡是吧把sayColor作為要領賦值給o,如許的話this就指代o了
o.sayColor(); //這裏實行的是box內里的this.color,也就是說這裏this指向了box
prototype
prototype
是保留他們一切實例方的真正地點,toString
和valueOf
等要領都是保留在peototype
名下,只不過是經由過程各自對象的實例接見。
每一個函數都包括兩個非繼續而來的要領:apply()
和call()
這兩個要領的用途都是在特定的作用域中挪用函數,實際上即是設置函數體內this
對象的值。apple()
吸收兩個參數,一個是个中運轉函數的作用域,另一個是參數數組。call()
與apple()
要領一樣,區別是call()
要領通報給函數的參數必需逐一傳。
function sum(num1,num2){
return num1 + num2;
}
function sum1(nu1,num2){
return sum.apply(this,arguments); //arguments能夠當數值傳,即是下面的[num1,num2];this示意window作用域
}
function sum2(nu1,numw){
return sum.apply(this,[num1,num2]); //apply能夠假裝另一個函數,這裏假裝了sum;[]示意通報的參數
}
alert(sum1(10,10)); //打印20
alert(sum2(10,10)); //打印20
這兩要領最大的用途是:擴大函數運轉的作用域。
window.color = "red"; //全局
var o = {color: "blue"}; //部分
function sayColor(){
alert(this.color); //這裏this是動態的
}
sayColor(); //打印"red"
//用call完成對象假裝
sayColor.call(this); //假裝window
sayColor.call(window); //假裝window
sayColor.call(o); //假裝sayColor,用call的優點:對象不須要與要領發作任何耦合關聯(耦合:相互關聯的意義,擴大和保護會發作連鎖反應)