JavaScript 函數(shù)的定義-調(diào)用、注意事項(xiàng)
函數(shù)定義
函數(shù)語句定義
function(a,b){ return a+b; }
表達(dá)式定義
var add = function(a,b){return a+b};
//函數(shù)表達(dá)式可以包含名稱,這在遞歸時(shí)很有用 var f = function fact(x){ if(x<=1) {return 1; }else { return x*faxt(x-1); } }
以表達(dá)式方式定義的函數(shù),函數(shù)的名稱是可選的。如果函數(shù)定義表達(dá)式包含名稱,函數(shù)的局部作用域?qū)?huì)包含一個(gè)綁定到函數(shù)對(duì)象的名稱,實(shí)際上,函數(shù)的名稱將成為函數(shù)內(nèi)部的一個(gè)局部變量
函數(shù)命名規(guī)范
1.like_this()第一個(gè)字符為小寫,當(dāng)包含多個(gè)單詞時(shí)候,單詞以下劃線分割
2.likeThis()第一個(gè)字符為小寫,當(dāng)包含多個(gè)單詞時(shí)候,除第一個(gè)單詞以外的單詞首字母使用大學(xué)字母
3.內(nèi)部函數(shù)或私有函數(shù),通常以一條下劃線為前綴
注:函數(shù)聲明語句‘被提前到外部腳本或外部函數(shù)作用于頂部,所以可以被在它定義之前出現(xiàn)的代碼所調(diào)用
以表達(dá)式方式定義函數(shù)前必須把它賦值給一個(gè)變量。所以表達(dá)式方式定義的函數(shù)在定義之前是無法調(diào)用的
函數(shù)返回值
- return語句返回函數(shù)的值給調(diào)用者。
- return語句沒有,則它返回undefined
嵌套函數(shù)
- 嵌套函數(shù)可以訪問他們的函數(shù)的參數(shù)和變量
- 但是嵌套函數(shù)不能出現(xiàn)在循環(huán)、條件判斷,或者try/cache/finally/with語句中
函數(shù)調(diào)用
- 作為函數(shù)
- 作為方法
- 作為構(gòu)造函數(shù)
- 通過他們的call()和apply()方法間接調(diào)用
作為函數(shù)調(diào)用
add(1,2)
根據(jù)ECMAScript3和非嚴(yán)格的ECMAScript5對(duì)函數(shù)調(diào)用的規(guī)定,調(diào)用上下文(this的值)是全局對(duì)象。然而在嚴(yán)格模式下,調(diào)用上下文則是undefined。
//定義一個(gè)函數(shù)且調(diào)用一個(gè)函數(shù)來確定當(dāng)前腳本運(yùn)行是否為嚴(yán)格模式
var strict = (function(){return this;}());
作為方法調(diào)用
var o = { m:1, n:2, add:function(){ this.result = this.m+this.n; } }
方法調(diào)用和函數(shù)調(diào)用的一個(gè)重大區(qū)別。----調(diào)用上下文
o.add() add的調(diào)用上下文為o,即:this
o.add() 等同于o['add']()
方法鏈:當(dāng)方法并不需要返回值時(shí)候,最好直接返回this
this為一個(gè)關(guān)鍵字,不是變量,也不是屬性名。JavaScript語法不允許給this賦值
和變量不同,關(guān)鍵字this沒有作用于的限制,嵌套的函數(shù)不會(huì)從調(diào)用它的函數(shù)中繼承this,如果想訪問外部函數(shù)的this,var self= this;保存在變量中
如果嵌套函數(shù)作為函數(shù)調(diào)用,其this的值指向調(diào)用它的對(duì)象。如果作為函數(shù)調(diào)用,this不是全局對(duì)象(非嚴(yán)格模式),就是undefined(嚴(yán)格模式)
構(gòu)造函數(shù)調(diào)用
var o = new Object();
構(gòu)造函數(shù)調(diào)用和普通函數(shù)調(diào)用以及方法調(diào)用在實(shí)參處理。調(diào)用上下文和返回值等方面都有不同。
凡是沒有形參的構(gòu)造函數(shù)調(diào)用都可以省略圓括號(hào)。
var o = new Object(); var o = new Object; //等價(jià)
構(gòu)造函數(shù)調(diào)用創(chuàng)建一個(gè)新的空對(duì)象,這個(gè)對(duì)象繼承自構(gòu)造函數(shù)的prototype屬性,這個(gè)函數(shù)試圖初始化這個(gè)新創(chuàng)建的對(duì)象,病將這個(gè)對(duì)象做為上下文,因此構(gòu)造函數(shù)可以使用this關(guān)鍵字來引用這個(gè)新創(chuàng)建的對(duì)象。
new o.m() 調(diào)用的上下文并不是o.
構(gòu)造函數(shù)并不使用return。如果構(gòu)造函數(shù)顯示的使用return語句返回一個(gè)對(duì)象,那么調(diào)用表達(dá)式的值就是這個(gè)對(duì)象。如果構(gòu)造函數(shù)但并沒有返回值,或者返回一個(gè)原始值,那么就會(huì)忽略返回值,同時(shí)使用新對(duì)象作為返回結(jié)果。
間接調(diào)用
call()
appy()
- JavaScript:new 一個(gè)函數(shù)和直接調(diào)用函數(shù)的區(qū)別分析
- JavaScript函數(shù)的4種調(diào)用方法實(shí)例分析
- 深入學(xué)習(xí) JavaScript中的函數(shù)調(diào)用
- 淺談js函數(shù)三種定義方式 & 四種調(diào)用方式 & 調(diào)用順序
- javascript函數(shù)的四種調(diào)用模式
- Javascript 函數(shù)的四種調(diào)用模式
- 深入理解JavaScript中的尾調(diào)用(Tail Call)
- javascript使用call調(diào)用微信API
- 基于JavaScript實(shí)現(xiàn)繼承機(jī)制之調(diào)用call()與apply()的方法詳解
- javaScript call 函數(shù)的用法說明
- JavaScript中的apply和call函數(shù)詳解
- JavaScript直接調(diào)用函數(shù)與call調(diào)用的區(qū)別實(shí)例分析
相關(guān)文章
JavaScript實(shí)現(xiàn)淺拷貝與深拷貝的方法分析
這篇文章主要介紹了JavaScript實(shí)現(xiàn)淺拷貝與深拷貝的方法,結(jié)合實(shí)例形式總結(jié)分析了JavaScript淺拷貝與深拷貝的定義與使用方法,需要的朋友可以參考下2018-07-07深入理解requestAnimationFrame的動(dòng)畫循環(huán)
這篇文章先給大家介紹了什么是requestAnimationFrame,而后才深入講述關(guān)于requestAnimationFrame的動(dòng)畫循環(huán),文章介紹的非常詳細(xì),相信對(duì)大家學(xué)習(xí)requestAnimationFrame具有一定的參考借鑒價(jià)值,有需要的朋友下面來一起看看吧。2016-09-09web前端開發(fā)中常見的多列布局解決方案整理(一定要看)
多列布局在web前端開發(fā)中也是較為常見的,今天小編給大家介紹這里會(huì)提到的多列布局有兩列定寬加一列自適應(yīng)、多列不定寬加一列自適應(yīng)、多列等分三種,感興趣的朋友一起看看吧2017-10-10Bootstrap Table 在指定列中添加下拉框控件并獲取所選值
通過 bootstrap-table 的Column 配置項(xiàng)中的formatter,將獲取到的數(shù)據(jù)轉(zhuǎn)換為包含數(shù)據(jù)的 select 控件。然后根據(jù)用戶選擇項(xiàng)更新對(duì)應(yīng)單元格數(shù)據(jù),最后通過getallselection方法獲取所選行數(shù)據(jù)2017-07-07微信小程序如何實(shí)現(xiàn)radio單選框單擊打勾和取消
這篇文章主要介紹了微信小程序如何實(shí)現(xiàn)radio單選框單擊打勾和取消,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01js實(shí)現(xiàn)將json數(shù)組顯示前臺(tái)table中
本文主要介紹了把JSON數(shù)組顯示在前臺(tái)的table中的方法。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01JavaScript操作Oracle數(shù)據(jù)庫示例
這篇文章主要介紹了JavaScript操作Oracle數(shù)據(jù)庫示例,本文使用ActiveXObject實(shí)現(xiàn)訪問Oracle數(shù)據(jù)庫,需要的朋友可以參考下2015-03-03