Function 類型的七點總結

1、不帶圓括號的函數名訪問的是函數指針,而非調用函數

function sum(num1,num2){

return num1+num2;

}

console.log(sum(10,10));//20

console.log(sum);  //function sum(num1, num2)

console.log(sum()); //NaN

var anotherSum=sum;

console.log(anotherSum(10,10));//20

sum=null;    //使得sum()函數的指針爲空

console.log(anotherSum(10,10));//20

console.log(sum(10,10));//uncaught TypeError: sum is not a function

2、ECMAScript 沒有函數重載的概念

雖然函數名能夠理解爲指針,可是ECMAScript 沒有函數重載的概念 若是申明瞭同名的函數,則按順序,後面的函數覆蓋掉前面的函數javascript

3、函數申明與函數表達式的區別---函數申明會被解釋器預先讀取(function declaration hoisting)

alert(sum(10,10));//20;由於預先讀取到了sum()函數的申明

        alert(sum1(10,10))//報錯,由於找不到sum1()函數;
        function sum(num1,num2){

        return num1+num2;

        }

        var sum1=function(num1,num2){

        return num1+num2;

        }

4、var sum=function( ){...} 和 sum=function( ){....}的區別?

和變量的定義是類似的,缺乏 var 關鍵字,定義的就是全局變量。 可是這兩種寫法都是函數的表達式寫法。java

5、在函數內部有兩個特殊的對象:arguments 和 this

arguments 是一個數組,主要做用是保存函數參數-----因此javascript函數不在意傳進來什麼類型的參數,也不在意傳進來幾個參數.數組

做用一:能夠直接利用數組訪問參數 ,如arguments[0];app

做用二:在遞歸函數中的應用--------arguments.callee();函數

這裏重點說明一下arguments.callee();它至關於FunctionaName( )this

function factorial(num){

    if (num<=1){

    return 1;

    }else{

    return num*arguments.callee(num-1);

    }

    }

不用 return num*factorial( num-1);的目的就是擔憂函數名在發生變化,程序會出錯 這叫消除緊密耦合現象prototype

6、函數的兩個屬性和方法

每一個函數都包含length 和prototype 屬性指針

length用法: FunctionName.length 能夠獲得函數當前傳入的參數個數code

prototype用法:函數的原型屬性,不少函數的方法依託於這個屬性,也是實現函數繼承的重要因素對象

每一個函數都包含非繼承來的兩個方法:apply( )call( );

主要的意義在於:(1)傳遞函數參數(2)擴充函數的做用域

舉個栗子:

//apply()和call()擴充函數做用域,功能:在特定的做用域中調用函數

window.color="red";

        var object={ color:"blue"}

        function sayColor(){

        alert(this.color);

        }

        sayColor();//red--函數內部做用域中沒有color屬性,便利用函數做用域鏈向上找到全局window.color="red"

        sayColor.call(this);//red--調用函數內部做用於,找color,沒找到便向上查找找到全局window.color="red"

        sayColor.call(object);//blue--函數體內部this指針指向object,因此找到 color:"blue"

        sayColor.call(window);//red--同理找到全局做用域window.color="red"

7、涉及到的專業術語

function declaration hoisting (函數申明提高) 避免函數的緊密耦合

相關文章
相關標籤/搜索