<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
先給一個例子,該函數的功能是返回陣列元素的和;
function sumArray(arr) { var sum = 0; for(var i = 0,aLength = arr.length;i < aLength;i++) { sum += arr[i]; } return sum; }
關鍵字function後面空一格,sumArray是函數的名字,其命名規範與變數名的命名規範相同:只能有字母、數位、下劃線和美元符號,不能以數位開頭,不能是關鍵字。
括號中是引數,又叫形式引數,只需要引數名就可以。引數可以是0個、1個或者多個,相互之間用,隔開,{}中間包含的是函數體。含有一條或者多條語句。函數體用來實現函數的功能。
關鍵字return後面是函數的返回值,函數也可以沒有返回值。函數執行完return這句話這裡就會退出執行,return下面的語句不再執行。返回值即函數的輸出。
用這種方式定義的函數,在函數定義的前面和後面都可以呼叫該函數,只要函數和呼叫函數的語句在一個原始檔裡面就可以了。
用表示式的方式定義函數,就是用賦值表示式把函數賦值給一個變數,這其實就是把函數看成一個變數。這個時候函數可以有名字,也可以沒有名字,沒有名字的函數叫做匿名函數。
帶名字的;
var funct = function getMax(a,b) { return a>b?a:b; };//注意這後面的分號不能少,因為我們定義的是一個變數!
和用函數語句定義不同的是,只能在函數定義語句之後呼叫該函數,且呼叫的時候只能用變數名funct,不能用函數名getMax,如:
var funct = function getMax(a,b) { return a>b?a:b; }; console.log(funct(1,2));//輸出2
匿名函數;
所謂匿名函數就是關鍵字function之後直接是參數列:
var funct = function(a,b) { return a>b?a:b; };
這個函數沒有名字,它被賦值給了變數funct,所以叫匿名函數。同樣,也只能在這一語句之後呼叫該函數。
var funct = function(a,b) { return a>b?a:b; }; console.log(funct(1,2));//輸出2
總結:用表示式定義函數是即拿即用的,定義了就只能在這一語句之後呼叫該函數
在實訓四中,我們曾經介紹過物件可以有自己的方法,當然這也是函數。這種函數的呼叫和前面兩關定義的函數有細小的區別。
//函數的定義:求三個數的最大值 function max(a,b,c) { if(a > b) { if(a > c) return a; else return c; } else { if(b > c) return b; else return c; } } //呼叫該函數 var result = max(1,2,3);//result為3 console.log(result);//輸出3
呼叫函數的時候,需要傳入和形參相同個數的的具體值,上面的函數有3個引數,所以下面呼叫的時候傳入3個具體的值,1傳給引數a,2傳給引數b,3傳給引數c。函數的返回值通過賦值符號=傳給了變數result。如果函數體內沒有return關鍵字,將返回undefined。
物件裡定義的函數的呼叫:
var ob = { id:1, getMax:function(a,b) { return a>b?a:b; } }; var result = ob.getMax(2,1);//result值為2 var result1 = ob["getMax"](2,1);//result1的值也是2
與上面的區別是,這裡要定位到函數,需要使用物件名.函數名或者物件名["函數名"],其它相同。
在大部分的程式語言裡面,都會對呼叫函數時傳入的實參個數和型別進行檢查,而JavaScript既不檢查實參的型別,也不檢查實參的個數。
JavaScript中的實參會按照順序從左到右依次匹配上形參,例如:
function myFunction(a,b,c) { console.log(a); console.log(b); console.log(c); } myFunction(1,2,3);
實參1傳入形參a,實參2傳入形參b,實參3傳入形參c。 當實參個數少於形參時,靠右的形參會被傳入值undefined。如:
function myFunction(a,b,c) { console.log(a); console.log(b); console.log(c); } myFunction(1,2);
實參1傳入形參a,實參2傳入形參b,undefined傳入形參c。 如果只想給右側的引數傳入資料,可以給前幾個實參傳入undefined。如:
function myFunction(a,b,c){ console.log(a); console.log(b); console.log(c); } myFunction(undefined,1,2);
上面這兩種做法不夠嚴謹,最佳實踐是給可能被傳入undefined值的形參設定一個預設值。如:
function getSum(a,b,c) { if(c === undefined) c = 0; console.log(a+b+c); } myFunction(1,2);
JavaScript一切都是物件,實參也是一個物件,有一個專門的名字arguments,這個物件可以看成一個陣列(類陣列,不是真的陣列),實參從左到右分別是arguments[0]、arguments[1]...,arguments.length表示實參的個數。
//求引數的和 function getSum() { var aLength = arguments.length; var sum = 0; for(var i = 0;i < aLength;i++) { sum += arguments[i]; } return sum; } console.log(getSum(1,2,3,4,5))//輸出15
這裡的形參直接省略,使用arguments[i]表示。
複雜的函數通常多達十幾個引數,儘管JavaScript不做引數個數和型別的檢查,但是呼叫時實參的順序不能亂。開發人員需要檢查每一個實參和形參的對應關係,這樣效率很低。一種很好的解決方案是使用物件作為引數,函數會根據物件的屬性名操作引數。
function myFunction(obj) { console.log(obj.name); obj.number++; return obj.number; } myObj = {name:"myObj",number:34}; myFunction(myObj);//輸出myObj console.log(myObj.number);//輸出35
一個函數(為方便行文,稱為a函數)可以作為另外一個函數(稱為b函數)的引數,b函數最終可以返回一個具體的值。
從原理上來說,b函數在自己的函數體內呼叫了a函數,所以需要把a函數的名字作為實際引數傳遞給b函數。如下:
//求最大值 function getMax(a,b) { return a>b?a:b; } //求最小值 function getMin(a,b) { return a<b?a:b; } //下面這個函數以函數作為引數,並最終返回一個值 function getM(func,num1,num2) { return func(num1,num2); } getM(getMax,1,2);//返回2 getM(getMin,1,2);//返回1
我們把a函數的名字(getMax或者getMin)傳給b函數(getM()),然後在b函數內部呼叫傳入的a函數,得到相關的結果。
到此這篇關於JavaScript函數的定義和基本使用方法的文章就介紹到這了,更多相關JS函數定義和使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45