函數(shù)

1.函數(shù)的定義與調(diào)用

1.初識函數(shù)

在Javascript中,函數(shù)就是對象,其應(yīng)用:

1)被賦值給一個變量

2)被賦值為對象的屬性

3)作為參數(shù)被傳入別的函數(shù)

4)作為函數(shù)的結(jié)果被返回

5)用字面量來創(chuàng)建

2.參數(shù)設(shè)置

1.無參函數(shù):適用于不需要提供任何數(shù)據(jù),即可完成指定功能的情況。

2.有參函數(shù):適用于開發(fā)時函數(shù)體內(nèi)的操作需要用戶傳遞數(shù)據(jù)的情況。

1)形參:形式參數(shù),具有特定的含義,在定義有參函數(shù)時設(shè)置的參數(shù)。

2)實參:實際參數(shù),也就是具體的值,在函數(shù)調(diào)用時傳遞的參數(shù)。

3.獲取函數(shù)調(diào)用時傳遞的所有實參:適用于開發(fā)時函數(shù)體形參不確定的情況。

1)實現(xiàn)方式:利用arguments對象,在函數(shù)體內(nèi)可獲取函數(shù)調(diào)用時傳遞的實參。

2)其他操作:length屬性可獲取實參的總數(shù),具體實參值可利用數(shù)組遍歷方式。

3.函數(shù)的調(diào)用

1.直接調(diào)用:函數(shù)名(實參值)

sayHi("南工院","新學(xué)期開學(xué)了");

2.在表達(dá)式中調(diào)用

這種方式適合有返回值的函數(shù),返回值作為表達(dá)式的一部分參與運算,有時還會和(alert、document)等語句配合輸出。

注意點:

1).return 語句不是函數(shù)必須的,但任何函數(shù)在任何時候都可以通過return語句+ 返回的值,實現(xiàn)返回。

2).若在一個文件中,定義函數(shù)名字相同,會使用最后定義的函數(shù)

2.變量的作用域

1.全局變量:不在任何函數(shù)內(nèi)聲明的變量(顯示定義)或在函數(shù)內(nèi)省略var聲明變量(隱式定義)都稱為全局變量。

作用范圍:它在同一個頁面文件中的所有腳本內(nèi)都可以使用。

2.局部變量:在函數(shù)體內(nèi)利用var關(guān)鍵字定義的變量稱為局部變量,它僅在該函數(shù)體內(nèi)有效。

3.塊級變量:ES6提供的let關(guān)鍵字聲明的變量稱為塊級變量,僅在"{}"中間有效,如if、for或while語句等。

4.垃圾回收機制:

在JavaScript中,局部變量只有在函數(shù)的執(zhí)行過程中存在,而在這個過程中會為局部變量在(棧或堆)內(nèi)存上分配相應(yīng)的空間,以存儲它們的值,然后在函數(shù)中使用這些變量,直到函數(shù)結(jié)束。

一旦函數(shù)執(zhí)行結(jié)束,局部變量就沒有存在必要了,此時JavaScript就會通過垃圾回收機制自動釋放它們所占用的內(nèi)存空間。

3.匿名函數(shù)

概念:匿名函數(shù)指的是沒有函數(shù)名稱的函數(shù)。

作用:可以有效的避免全局變量的污染以及函數(shù)名的沖突問題。

說明:既是函數(shù)表達(dá)式的另一種表示形式,又可通過函數(shù)聲明的方式實現(xiàn)調(diào)用。

① 函數(shù)表達(dá)式中省略函數(shù)名

var fn = function (num1, num2){

return? num1 + num2;

};

fn(1, 2);

② 自調(diào)用方式

(function (num1, num2) {

return? num1 + num2;

})(2, 3);

③ 處理事件

document.body.onclick? = function () {

alert('Hi, everybody!');

}

4.回調(diào)函數(shù)

1.概念:所謂回調(diào)函數(shù)指的就是一個函數(shù)A作為參數(shù)傳遞給一個函數(shù)B,然后在B的函數(shù)體內(nèi)調(diào)用函數(shù)A。此時,我們稱函數(shù)A為回調(diào)函數(shù)。

2.提示:匿名函數(shù)常用作函數(shù)的參數(shù)傳遞,實現(xiàn)回調(diào)函數(shù)。

3.應(yīng)用:函數(shù)體中某部分功能由調(diào)用者決定,此時可以使用回調(diào)函數(shù)。

4.在JavaScript中還為數(shù)組提供了很多利用回調(diào)函數(shù)實現(xiàn)具體功能的方法。


function cal(num1,num2,fn) {

return fn(num1,num2)

}

console.log(cal(45,55,function (a,b) {

return a+b

}))

console.log(cal(10,20,function (a,b) {

return a*b

}))


var arr=[[1,2,3],[4,5,6],[7,8,9]]

var reverse=arr[1].map(function (col,i) {

return arr.map(function (row) {

return row[i];

??? })

})

console.log(reverse)

5.嵌套與遞歸

1.嵌套函數(shù)

概念:在一個函數(shù)內(nèi)部存在另一個函數(shù)的聲明。

特點:內(nèi)層函數(shù)只能在外層函數(shù)作用域內(nèi)執(zhí)行,在內(nèi)層函數(shù)執(zhí)行的過程中,若需要引入某個變量,首先會在當(dāng)前作用域中尋找,若未找到,則繼續(xù)向上一層級的作用域中尋找,直到全局作用域,我們稱這種鏈?zhǔn)降牟樵冴P(guān)系為作用域鏈。

variBaseNum= 10;

function addNum(iNum1, iNum2) {

function doAdd() {

return iNum1 + iNum2 + iBaseNum;

}

?return doAdd();

}

2.遞歸調(diào)用

概念:遞歸調(diào)用是函數(shù)嵌套調(diào)用中一種特殊的調(diào)用。它指的是一個函數(shù)在其函數(shù)體內(nèi)調(diào)用自身的過程,這種函數(shù)稱為遞歸函數(shù)。

6.閉包函數(shù)

1.在JavaScript中,內(nèi)嵌函數(shù)可以訪問定義在外層函數(shù)中的所有變量和函數(shù),并包括其外層函數(shù)能訪問的所有變量和函數(shù)。但是在函數(shù)外部則不能訪問函數(shù)的內(nèi)部變量和嵌套函數(shù)。此時就可以使用"閉包"來實現(xiàn)。

2.所謂"閉包"指的就是有權(quán)訪問另一函數(shù)作用域內(nèi)變量(局部變量)的函數(shù)。它最主要的用途是以下兩點:

1)可以在函數(shù)外部讀取函數(shù)內(nèi)部的變量。

2)可以讓變量的值始終保持在內(nèi)存中。

<script>

function fn() {

var times=0

var c=function () {

return ++times

}

return c

??? }

var count=fn();

console.log(count())

console.log(count())

console.log(count())

console.log(count())

console.log(count())

</script>

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

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

  • 本文檔內(nèi)容參考 《JavaScript 闖關(guān)記》之函數(shù) 函數(shù)是一段代碼,它只定義一次,但可以被執(zhí)行或調(diào)用任意次。在...
    穿越人海遇見你閱讀 1,105評論 0 1
  • 函數(shù)只定義一次,但可能被執(zhí)行或調(diào)用任意次。JS函數(shù)是參數(shù)化的,函數(shù)的定義會包括一個稱為形參的標(biāo)識符列表,這些參數(shù)在...
    PySong閱讀 909評論 0 0
  • 函數(shù)只定義一次,但可能被執(zhí)行或調(diào)用任意次。JS函數(shù)是參數(shù)化的,函數(shù)的定義會包括一個稱為形參的標(biāo)識符列表,這些參數(shù)在...
    PySong閱讀 662評論 0 0
  • 一、函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別? 函數(shù)聲明和函數(shù)表達(dá)式的區(qū)別:函數(shù)聲明可以提升到其他代碼之前(即函數(shù)聲明前置)...
    __Qiao閱讀 337評論 0 0
  • 1. 函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 使用function關(guān)鍵字聲明一個函數(shù)時,聲明不必放到調(diào)用的前面。//函數(shù)聲...
    _李祺閱讀 329評論 0 0

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