JS之函數(shù)的聲明和調(diào)用

今天用markdown來寫,方便寫js代碼,富文本不會用,今天有點愁,不說了,直接講知識點!最下面還有面試一般會問的題!

函數(shù)

為什么要有函數(shù)?

在寫代碼的時候,有一些常用的代碼需要書寫多次,如果直接復(fù)制粘貼的話,會造成大量的冗余代碼。

如果修改呢?? 多個頁面呢??

函數(shù)可以封裝一段重復(fù)的JavaScript代碼,它只需要聲明一次,就可以被多次調(diào)用。

重復(fù)代碼、冗余代碼的缺點:

1.代碼重復(fù),可閱讀性差

2.不易維護,如果代碼邏輯改變了,所有地方的代碼都要跟著改變,效率太低。

使用場景 :? 只要js出現(xiàn)的地方都有函數(shù)

?

函數(shù)的聲明與調(diào)用

就相當(dāng)于之前數(shù)組的創(chuàng)建和使用

聲明函數(shù)的語法 :

function函數(shù)名() {

// 函數(shù)體

}

調(diào)用函數(shù)的語法 :

函數(shù)名

函數(shù)名()

特點:

1.函數(shù)聲明的時候,函數(shù)體并不會執(zhí)行,函數(shù)體只有在調(diào)用的時候,才會執(zhí)行;

2.可以調(diào)用多次;

代碼示例 :

// 聲明函數(shù)

functionsayHi() {

console.log('薩瓦迪卡');

}

?

// 調(diào)用函數(shù)

sayHi();

函數(shù)的參數(shù)

?? ? ? function getSum() {

?? ? ? ? var a = 10;

?? ? ? ? var b = 20;

?? ? ? ? console.log(a+b);

? }

?? ? ? //? 打印的是 10+20

?? ? ? getSum();

?? ? ? // 想打印 20+30?? 怎么辦????

?? ? ? getSum();

形參 ( 形式參數(shù) ) : 在函數(shù)聲明時, 設(shè)置的參數(shù)。作用是占位置 。只能在函數(shù)內(nèi)部使用.

實參 ( 實際參數(shù) ) : 在函數(shù)調(diào)用時,傳入的參數(shù)。 作用 : 函數(shù)調(diào)用時,會把實參的值賦值給形參, 這樣形參就有了值, 在函數(shù)體里,,,可以直接使用形參!

語法 :

//帶參數(shù)的函數(shù)聲明

function函數(shù)名(形參1,形參2,形參...){

//函數(shù)體

}

?

//帶參數(shù)的函數(shù)調(diào)用

函數(shù)名(實參1,實參2,實參3);

如何確定形參:

在聲明函數(shù)的時候,碰到不確定的值的時候,就可以定義成形參。

注意:

1.形參在聲明時,值不固定,只有在調(diào)用的時候,形參的值才確定,形參的值會跟著函數(shù)調(diào)用時的實參不一樣而不一樣。

2.如何確定形參:在聲明函數(shù)的時候,碰到不確定的值的時候,就可以定義成形參。

函數(shù)的返回值

當(dāng)函數(shù)執(zhí)行完的時候,我們期望函數(shù)給我一些反饋(比如計算的結(jié)果),這個時候可以讓函數(shù)返回一些東西。也就是返回值。函數(shù)通過return返回一個返回值

返回值語法:

//聲明一個帶返回值的函數(shù)

function函數(shù)名(形參1,形參2,形參...){

//函數(shù)體

return返回值;

}

?

//可以通過變量來接收這個返回值

var變量=函數(shù)名(實參1,實參2,實參3);

函數(shù)返回值注意事項:

★return后面的語句不執(zhí)行。

★函數(shù)可以沒有返回值,函數(shù)如果沒有return,那么返回結(jié)果是undefined。

★函數(shù)的參數(shù)可以有多個,但是返回值只能有1個。

函數(shù)三要素

函數(shù)三要素包括:函數(shù)名、參數(shù)、返回值

注意 : 參數(shù)和返回值可以沒有,,,但是函數(shù)名一定要有;

函數(shù)內(nèi)部可以調(diào)用函數(shù)

在函數(shù)內(nèi)部是可以繼續(xù)調(diào)用別的函數(shù)的。

functionchiFan() {

?

console.log('開始吃飯');

console.log('吃完了');

?? }

functionqiaoDaiMa() {

?

console.log('開始敲代碼');

chiFan()

console.log('代碼敲完了');

?? }

qiaoDaiMa()


遞歸函數(shù)

遞歸函數(shù):自己直接或者間接調(diào)用自己的函數(shù);? 無限調(diào)用

注意 : 遞歸函數(shù)一定要留有出口,不然就是死循環(huán)了

遞歸函數(shù)比較抽象,尤其是第一次接觸的同學(xué)們,大家了解即可。

斐波那契數(shù)列,有個人想知道,一年之內(nèi)一對兔子能繁殖多少對?于是就筑了一道圍墻把一對兔子關(guān)在里面。已知一對兔子每個月可以生一對小兔子,而一對兔子從出生后第3個月起每月生一對小兔子。假如一年內(nèi)沒有發(fā)生死亡現(xiàn)象,那么,一對兔子一年內(nèi)(12個月)能繁殖成多少對?

//兔子的規(guī)律為數(shù)列,1,1,2,3,5,8,13,21 ,34 , 55, 89, 144

場景 : 少用,,性能也不太好!? 100個月

函數(shù)也是一種類型

聲明函數(shù)的兩種方式

方式1 : 函數(shù)聲明:

function函數(shù)名(){

//函數(shù)體

}

方式2 : 函數(shù)表達式 ( 匿名函數(shù) )

var函數(shù)名=function(){

//函數(shù)體

}

函數(shù)可以作為參數(shù)

通常,我們把作為參數(shù)傳遞的函數(shù)叫做回調(diào)函數(shù)

functionfn1(fn) {

fn();

}

fn1(function(){

console.log("哈哈");

});

函數(shù)可以作為返回值

在js高級中,閉包會使用到。

functionfn1() {

returnfunction(){

console.log("呵呵");

?? }

}

fn1()();//調(diào)用

作用域

作用域:變量起作用的區(qū)域

全局作用域 :在script標(biāo)簽內(nèi),函數(shù)外的區(qū)域就是全局作用域,在全局作用內(nèi)聲明的變量叫做全局變量 。全局變量可以在任意地方訪問。

函數(shù)作用域 :在? 函數(shù)內(nèi)的區(qū)域? 叫做函數(shù)作用域,在函數(shù)作用域內(nèi)聲明的變量叫做局部變量 ,局部變量只有在當(dāng)前函數(shù)內(nèi)才能訪問到。

全局變量:在函數(shù)外,script標(biāo)簽內(nèi)聲明的變量就是全局變量,全局變量在任何地方都能訪問的到。

局部變量:在函數(shù)中聲明的變量,就是局部變量,局部變量只有在當(dāng)前函數(shù)體內(nèi)能夠訪問。

隱式全局變量:沒有使用var定義的變量也是全局變量,叫做隱式全局變量。(不要使用)

總結(jié) :

// 全局作用域 : script標(biāo)簽內(nèi), 函數(shù)外

// ? ? ? ? ?? 全局變量 => 任何地方都可以訪問

// 函數(shù)作用域 : 函數(shù)內(nèi)部

// ? ? ? ? ? ? 局部變量 => `當(dāng)前函數(shù)`內(nèi)部

?

// 除了兩個常用的變量還有 隱式全局變量 : 任何地方都能訪問(前提是已經(jīng)好) ? (避免使用)(先執(zhí)行函數(shù))

// 查看哪些是全局、局部、隱式全局

// 計算

varnum=11;

?

functionfn() {

varnum1=12;

num2=22;

console.log(num);

console.log(num1);

}

fn();

console.log(num);

// console.log(num1);

console.log(num2);

變量的查找規(guī)則:

函數(shù)內(nèi)部可以使用函數(shù)外部的變量? (見上例)

有局部變量就用局部變量,沒有局部變量就用全局變量。?

預(yù)解析

?? ? ? console.log(num4);

?? ? // var num4 = '123';

js執(zhí)行代碼分為兩個過程:

預(yù)解析過程(變量與函數(shù)提升)

代碼一行一行執(zhí)行

預(yù)解析過程:分別舉例

// 預(yù)解析過程

// 1. 把var聲明的變量提升到當(dāng)前作用域最前面,不會提升賦值? var num = 19 ; var fn = function() {..}

// 2. 把函數(shù)聲明 提升到當(dāng)前作用域的最前面,, ? function test() {....}

// 3. 如果函數(shù)同名 ???? 后者會覆蓋前者? (帥)

// 4. 如果 var聲明的 和 函數(shù)聲明的同名 ,? 函數(shù)優(yōu)先

面試題:(博主被問到過的面試題)

vara=4;

console.log(a);

a=6;

console.log(a);

functiona() {

console.log('哈');

?? }

?

a();

?

a=10;

console.log(a);

匿名函數(shù)與自執(zhí)行函數(shù)

匿名函數(shù)

匿名函數(shù):沒有名字的函數(shù)

匿名函數(shù)如何使用:

1.將匿名函數(shù)賦值給一個變量,這樣就可以通過變量進行調(diào)用

2.自執(zhí)行(匿名函數(shù)自執(zhí)行)

匿名函數(shù)自執(zhí)行的作用:防止全局變量污染。

// 自執(zhí)行

(functionfn(){

console.log("我可以自己執(zhí)行哦");

})();

?

//張三的代碼

;(function(){

varnum=11;

functionfn() {

console.log("呵呵")

?? }

fn();

console.log(num);

? })();

//李四的代碼

?

注意:分號

// 注意點 : 代碼規(guī)范

vara=10

varb=20

b=a

(function() {

?

console.log(b);

?

?? })();

其實規(guī)范還是看各個大廠的要求,只要大廠內(nèi)部統(tǒng)一風(fēng)格就可以了!

最后編輯于
?著作權(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)容

  • 函數(shù)和對象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對于任何一門語言來說都是核心的概念。通過函數(shù)可以封裝任意多條語句,而且...
    道無虛閱讀 4,926評論 0 5
  • 函數(shù)只定義一次,但可能被執(zhí)行或調(diào)用任意次。JS函數(shù)是參數(shù)化的,函數(shù)的定義會包括一個稱為形參的標(biāo)識符列表,這些參數(shù)在...
    PySong閱讀 662評論 0 0
  • 函數(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閱讀 368評論 0 0
  • 概要 64學(xué)時 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,789評論 0 3

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