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 作為一個前端小白,入門跟著這幾個來源學習,感謝作者的分享,