1. 程式人生 > >JavaScript基礎之函式基礎

JavaScript基礎之函式基礎

函式

函式的定義

函式是指由 事件驅動 或 當它被呼叫時 執行的可重複使用 的程式碼塊。

函式定義的方式有兩種:

函式由關鍵字function定義,第一種定義方式:函式宣告形式

function abs (x) {
    if (x > 0) {
    return x;
 } else {
    return;
 }
}

其中,abs為函式名,x為引數,多個引數用逗號","隔開, 花括號裡的是函式體,函式體可以是語句塊,也可以是空語句。

函式體在執行時,一旦執行到return時,函式執行結束並返回結果,且return後面的程式碼不執行;如果沒有return,函式也會返回結果,但此時返回的值是undefined

由於javascript函式也是一個物件,abs()就是一個函式物件,我們可以將abs()視為指向此函式的一個變數。

因此第二種函式的定義方式為:函式表示式形式

var abs =function (x) {
  if (x >0) {
  return x;
 }  else {
  return;
 }
};

這種情況下,function (x) {......}是一個匿名函式,它沒有函式名,但它賦值給了變數abs,因此可以通過變數abs呼叫該函式。

注:當匿名函式賦值給一個變數,後面的要加";",不能省略。

當呼叫abs()函式時,若沒有引數,即:

abs(); //返回NaN

此時,引數為undefined,返回的結果為NaN。

想要避免收到undefined,可以對引數進行檢查即:

function abs (x) {
  if (typeof x !== undefined) {
    throw"Not a number"
 } if (x >0) {
    return x;
 } else {
    return;
 }
}

argument

JavaScript函式自帶一個關鍵字argument,它指向當前函式的呼叫者傳入的所有引數,類似一個數值Array,但又不是一個Array。使用argument可以訪問傳入函式的所有引數,arguments[0]表示訪問傳入函式的第一個引數,arguments.length

得到傳入引數的個數。

JavaScript可以接收任意多個引數。

如:

function abs (x) {
  if (typeof x !== undefined) {
    throw"Not a number"
 } if (x >0) {
    return x;
 } else {
    return;
 }
}

呼叫:
abs(10, 1, 20, 0); //返回10 1 20 0

argument[0]得到的結果是10,argument[1]得到的結果是1,argument[3]得到的結果是0。使用argument.length得到引數的個數為4。

rest

當我們呼叫函式時,實參的個數大於形參的個數時,想要獲取全部的實參,不得不使用argument書寫複雜的程式碼來實現。

function foo (a, b) {
    var i, rest = []; //定義一個空陣列,用來裝多餘的引數。
    if (arguments.length > 2) {
        for (i = 2; i<arguments.length; i++) {
            rest.push(arguments[i]);
        }
    }
    console.log('a = ' + a);
    console.log('b = ' + b);
    console.log(rest);
}

由於定義函式時, 規定的形參個數為2,所以想要得到多餘的實參,應規定當傳入的實參的個數大於2時,使用argument.length獲得傳入的實引數量,rest.push(argument[i])獲得多餘的引數,這樣書寫很複雜,ES6標準引入了rest關鍵字,用來獲取傳入的全部引數。

上面的例項可以書寫為:

function foo (a, b, ...rest) {
  console.log(rest);
}

這樣可以輸出全部的引數。

rest使用格式:rest必須寫在引數的最後面且rest前面必須用"..."標識,如:function  abs (a, b, ...rest){}

小心return語句

我們知道javascript引擎有個自動在行末尾新增分號的機制,這樣很可能會掉進return的陷阱。如:

function abs (x) {
  return {name : "x"};
}

但如果不小心這樣書寫了:

function abs(x) {
    return
           {name : "x"};
}

由於javascript的機制,上述程式碼其實寫成了:

function abs (x) {
    return;  //自動在行末尾新增分號,想當於 return undefined。
       {name : "x"};//此時這個段程式碼不會執行。
}


由於return後面會自動新增";",執行到return時,函式執行結束,後面的程式碼{name : "x"}不會執行,相當於返回了undefined值。所以正確的多行書寫格式為:

function abs (x) {
    return {
    name : "x"
  };
} 

沒有傳遞值的形參將自動賦值undefined,就跟定義了變數沒有初始化相似。

function abs (num1, num2) {
    return num1 + num2;
}

abs(1); //返回NaN

以上將1傳遞給了引數num1,而沒有傳遞值給num2,所以將自動賦值undefined給num2,因此返回結果是"1 + undefined"的值,即:NaN。

過載

過載函式、方法的名稱相同,但引數的型別和數量(函式簽名)不同的形式稱過載。

JavaScript不像其它語言一樣有過載,因為JavaScript的引數是包含零個或多個值的陣列。

function abs (num1, num2) {
    return num1 + num2;
}

funcion abs (num1, num2) {
    return num1 * num2;
}

abs(1,2);

以上定義了兩個相同的函式,則該名字屬於後定義的函式,後定義的函式會覆蓋先定義的函式,所以呼叫了abs()函式後的結果返回2。

相關推薦

JavaScript基礎函式基礎

函式 函式的定義 函式是指由 事件驅動 或 當它被呼叫時 執行的可重複使用 的程式碼塊。 函式定義的方式有兩種: 函式由關鍵字function定義,第一種定義方式:函式宣告形式 function abs (x) { if (x > 0) { re

python基礎函式基礎

python之函式基礎   ----------------------------------------------------------------------------------------------------- 函式一般格式 函式的格式包括:   def 函式名(引數)

Javascript基礎函式篇_1

前言 在java世界裡遊覽一番後,實際專案中,因進度緊張,需要支撐同事做一段時間的前端開發,所用JavaScript框架為Vue.js。說實話,在做Java後臺開發過程中,發現還有很多地方需要用到javascript的。比如android中的cordova和web服務端的nods.js等。作為1

JavaScript基礎函式定義與呼叫

在JavaScript中,定義函式的方式如下: function abs(x){ if(x>0){ return x; }else{ return -x; } } 上述abs()函式的定義如下: 1.

黑馬程式設計師——Java基礎函式與陣列

------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g

JavaScript基本知識——函式基礎

函式 一、函式的作用: 通過函式來封裝多條語句,並且可以隨時呼叫,想當於把零食封存起來然後可以隨時隨地拿出來吃。 二、函式的宣告: 函式使用function宣告,後面跟一組引數以及函式體,語法如下: function functionName (形參1,形參2,…){ statement

python基礎函式返回多個值的方法

例: >>> def test(): a=11 b=22 c=33 return a #多個return,語法不會報錯,但是隻執行第一個return return b #不會執行此條語句 return c #不會執行此條語句 >>> num

C++程式設計基礎函式

函式是程式程式碼的一個自包含單元,用於完成某一特定的任務。 定義函式的目的: 避免重複的程式設計, 使程式更加模組化,便於閱讀和修改。 一個程式必須有且只有一個main()函式,C++從main()函式開始執行。 C++語言中,所有函式都是平行獨立的,無主次或相互包含之分。函式可以巢狀呼叫,

python基礎函式

函式 定義一個函式 你可以定義一個由自己想要功能的函式,以下是簡單的規則: 函式程式碼塊以 def 關鍵詞開頭,後接函式識別符號名稱和圓括號()。 任何傳入引數和自變數必須放在圓括號中間。圓括號之間可以用於定義引數。 函式的第一行語句可以選擇性地使用文件字

c語言基礎函式

實參和形參 主調與被調函式間有資料傳遞關係,這就是有參函式。 在定義函式時,函式名後面括號中的變數名稱為“形式引數”, 在主調函式呼叫一個函式時,函式名後面括號中的引數(可以是表示式)稱為“實際引數”。 注意:發生呼叫時,呼叫函式把實參的值複製一份,傳送給被呼叫函式的

go語音基礎函式

一、函式 1、定義格式 函式構成程式碼執行的邏輯結構。在Go語言中,函式的基本組成為:關鍵字func、函式名、引數列表、返回值、函式體和返回語句。 Go 語言函式定義格式如下: func FuncName(/*引數列表*/) (o1 type1, o2 type2/*返回型別*/) {

go語音基礎函式只有一個返回值

1、函式只有一個返回值 示例1: package main //必須有一個main包 import "fmt" func myfunc01() int { return 666 } func main() { var a int a = myfunc01() fm

shell基礎函式、遞迴、訊號

一、函式 1.語法 方法1: 函式名() { 函式體 return n } 方法2: function 函式名() { 函式體 return n } 2.呼叫函式 3.引用函式 注意:每次引用函式時,bash會重新回到函式的定義 函式不一定要

NOI題解(1.12程式設計基礎函式與過程抽象)(待補全)

01:簡單算術表示式求值 #include <cstdlib> #include <iostream> #include <stdlib.h> using nam

zhuan:Jmeter基礎---jmeter基礎概念

初始 可視化 定時器 填充 測試 path 概念 性能測試 行為 JMeter 介紹: 一個非常優秀的開源的性能測試工具。 優點:你用著用著就會發現它的重多優點,當然不足點也會呈現出來。 從性能工具的原理劃分: Jmeter工具和其他性能工具在原理上完全一致,工具包

python開發基礎語法基礎

一、知識點 (一)python介紹 1.Python被設計成一種高可讀性的語言,它大量地使用了英語單詞作為關鍵字,不像其他語言使用標點符號構成複雜的語法結構。 2.Pyton是支援面向物件的,支援在物件中進行程式碼封裝,是一種面向物件的語言。 3.Python是一種解釋性語言,不用編譯源程式。 4.

.Net基礎C#基礎

(一)C#註釋符 與C++相似,可以使用以下三種方式: 1、/**/ 2、// 3、/// (二)C#中的常用快捷鍵(VS2010) Ctrl + K + D : 快速對齊程式碼 Ctrl + J :快速彈出智慧提示 Home : 游標移至行首 End :游標移至行尾 Sh

Linux基礎Ubuntu基礎命令-date、cal、bc(待更新)

基礎操作命令: 顯示日期與時間的命令: date 顯示日曆的命令: cal 簡單好用的計算器: bc 1. 顯示日期的命令: date 如果在文字介面中想要知道目前Linux系統的時間,那麼就直接在命令列模式輸入date即可顯示: [[email&#

python基礎列表基礎

name_list = ["夏","商","周","秦","漢","三國"] num_list = [100,148,186,160,173,184] #zip函式將迭代器封裝成生成器,平行遍歷 for rust,ru in zip(name_list,num_list): prin

前端入門12-JavaScript語法函式

宣告 本系列文章內容全部梳理自以下幾個來源: 《JavaScript權威指南》 MDN web docs Github:smyhvae/web Github:goddyZhao/Translation/JavaScript 作為一個前端小白,入門跟著這幾個來源學習,感謝作者的分享,