【javascript】Function類型的七點(diǎn)總結(jié)

一。不帶圓括號(hào)的函數(shù)名訪問(wèn)的是函數(shù)指針,而非調(diào)用函數(shù)

//不帶圓括號(hào)的函數(shù)名訪問(wèn)的是函數(shù)指針,而非調(diào)用函數(shù)

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()函數(shù)的指針為空

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

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

二。雖然函數(shù)名可以理解為指針,但是ECMAScript 沒(méi)有函數(shù)重載的概念

如何申明了同名的函數(shù),則按順序,后面的函數(shù)覆蓋掉前面的函數(shù)

三。函數(shù)申明與函數(shù)表達(dá)式的區(qū)別---函數(shù)申明會(huì)被解釋器預(yù)先讀?。╢unction declaration hoisting)

alert(sum(10,10));//20;因?yàn)轭A(yù)先讀取到了sum()函數(shù)的申明

alert(sum1(10,10))//報(bào)錯(cuò),因?yàn)檎也坏絪um1()函數(shù);

function sum(num1,num2){

return num1+num2;

}

var sum1=function(num1,num2){

return num1+num2;

}

四。var sum=function( ){...} 和 ?sum=function( ){....}的區(qū)別?

和變量的定義是相似的,缺少 var 關(guān)鍵字,定義的就是全局變量。?

但是這兩種寫法都是函數(shù)的表達(dá)式寫法。

五。在函數(shù)內(nèi)部有兩個(gè)特殊的對(duì)象:arguments 和 this?

arguments 是一個(gè)數(shù)組,主要作用是保存函數(shù)參數(shù)-----所以javascript函數(shù)不在乎傳進(jìn)來(lái)什么類型的參數(shù),也不在乎傳進(jìn)來(lái)幾個(gè)參數(shù).

作用一:可以直接利用數(shù)組訪問(wèn)參數(shù) ,如arguments[0];

作用二:在遞歸函數(shù)中的應(yīng)用--------arguments.callee();

這里重點(diǎn)說(shuō)明一下arguments.callee();它相當(dāng)于FunctionaName( )

function factorial(num){

if (num<=1){

return 1;

}else{

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

}

}

不用 return?num*factorial( num-1);的目的就是擔(dān)心函數(shù)名在發(fā)生變化,程序會(huì)出錯(cuò) ?這叫消除緊密耦合現(xiàn)象

六。函數(shù)的兩個(gè)屬性和方法?

?每個(gè)函數(shù)都包含length 和prototype 屬性

length用法: ?FunctionName.length ?可以得到函數(shù)當(dāng)前傳入的參數(shù)個(gè)數(shù)

prototype用法:函數(shù)的原型屬性,很多函數(shù)的方法依托于這個(gè)屬性,也是實(shí)現(xiàn)函數(shù)繼承的重要因素

每個(gè)函數(shù)都包含非繼承來(lái)的兩個(gè)方法:apply( )和call( );

主要的意義在于:(1)傳遞函數(shù)參數(shù)(2)擴(kuò)充函數(shù)的作用域

舉個(gè)栗子:

//apply()和call()擴(kuò)充函數(shù)作用域,功能:在特定的作用域中調(diào)用函數(shù)

window.color="red";

var object={ color:"blue"}

function sayColor(){

alert(this.color);

}

sayColor();//red--函數(shù)內(nèi)部作用域中沒(méi)有color屬性,便利用函數(shù)作用域鏈向上查找找到全局window.color="red"

sayColor.call(this);//red--調(diào)用函數(shù)內(nèi)部作用于,找color,沒(méi)找到便向上查找找到全局window.color="red"

sayColor.call(object);//blue--函數(shù)體內(nèi)部this指針指向object,所以找到 color:"blue"

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

七。涉及到的專業(yè)術(shù)語(yǔ):

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文檔內(nèi)容參考 《JavaScript 闖關(guān)記》之函數(shù) 函數(shù)是一段代碼,它只定義一次,但可以被執(zhí)行或調(diào)用任意次。在...
    穿越人海遇見你閱讀 1,112評(píng)論 0 1
  • 函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 (*)解析器會(huì)率先讀取函數(shù)聲明,并使其在執(zhí)行任何代碼之前可以訪問(wèn);函數(shù)表達(dá)式則必須...
    coolheadedY閱讀 446評(píng)論 0 1
  • Chapter 5 引用類型 Object類型 創(chuàng)建Object實(shí)例new Object()var person ...
    云之外閱讀 437評(píng)論 0 0
  • 第一章: JS簡(jiǎn)介 從當(dāng)初簡(jiǎn)單的語(yǔ)言,變成了現(xiàn)在能夠處理復(fù)雜計(jì)算和交互,擁有閉包、匿名函數(shù), 甚至元編程等...
    LaBaby_閱讀 1,761評(píng)論 0 6
  • 說(shuō)起來(lái) ECMAScript 中什么有意思,我想那莫過(guò)于函數(shù)了——而有意思的根源,則在于函數(shù)實(shí)際上是對(duì)象。每個(gè)函數(shù)...
    查查查查查查克閱讀 1,565評(píng)論 2 17

友情鏈接更多精彩內(nèi)容