函數基本概念

函數

經由過程函數能夠封裝恣意多條語句,能夠在任何地方,任何時刻挪用實行。每一個函數都是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對象援用的就是windowwindow是一個對象,而且是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是保留他們一切實例方的真正地點,toStringvalueOf等要領都是保留在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的優點:對象不須要與要領發作任何耦合關聯(耦合:相互關聯的意義,擴大和保護會發作連鎖反應)
    原文作者:UCCs
    原文地址: https://segmentfault.com/a/1190000014514241
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞