JavaScript 函數的定義-調用、注意事項

函數定義javascript

函數語句定義java

function(a,b){
  return a+b;  
}

表達式定義app

var add = function(a,b){return a+b};

//函數表達式能夠包含名稱,這在遞歸時頗有用 var f = function fact(x){ if(x<=1) {return 1; }else { return x*faxt(x-1); } }函數

以表達式方式定義的函數,函數的名稱是可選的。若是函數定義表達式包含名稱,函數的局部做用域將會包含一個綁定到函數對象的名稱,實際上,函數的名稱將成爲函數內部的一個局部變量this

 

函數命名規範 spa

1.like_this()第一個字符爲小寫,當包含多個單詞時候,單詞如下劃線分割   prototype

2.likeThis()第一個字符爲小寫,當包含多個單詞時候,除第一個單詞之外的單詞首字母使用大學字母  對象

3.內部函數或私有函數,一般以一條下劃線爲前綴blog

 

注:函數聲明語句‘被提早到外部腳本或外部函數做用於頂部,因此能夠被在它定義以前出現的代碼所調用繼承

以表達式方式定義函數前必須把它賦值給一個變量。因此表達式方式定義的函數在定義以前是沒法調用的

 

函數返回值

  • return語句返回函數的值給調用者。
  • return語句沒有,則它返回undefined

 

嵌套函數

  • 嵌套函數能夠訪問他們的函數的參數和變量
  • 可是嵌套函數不能出如今循環、條件判斷,或者try/cache/finally/with語句中

函數調用

  • 做爲函數
  • 做爲方法
  • 做爲構造函數
  • 經過他們的call()和apply()方法間接調用

做爲函數調用

add(1,2)

  根據ECMAScript3和非嚴格的ECMAScript5對函數調用的規定,調用上下文(this的值)是全局對象。然而在嚴格模式下,調用上下文則是undefined。

 1 //定義一個函數且調用一個函數來肯定當前腳本運行是否爲嚴格模式

2 var strict = (function(){return this;}()); 

 

 

做爲方法調用

var o = {
  m:1,
  n:2,
  add:function(){
    this.result = this.m+this.n;
   }
}

  方法調用和函數調用的一個重大區別。----調用上下文

  • o.add() add的調用上下文爲o,即:this
  • o.add() 等同於o['add']()
  • 方法鏈:當方法並不須要返回值時候,最好直接返回this
  • this爲一個關鍵字,不是變量,也不是屬性名。JavaScript語法不容許給this賦值
  • 和變量不一樣,關鍵字this沒有做用於的限制,嵌套的函數不會從調用它的函數中繼承this,若是想訪問外部函數的this,var self= this;保存在變量中
  • 若是嵌套函數做爲函數調用,其this的值指向調用它的對象。若是做爲函數調用,this不是全局對象(非嚴格模式),就是undefined(嚴格模式)

構造函數調用

var o = new Object();

  構造函數調用和普通函數調用以及方法調用在實參處理。調用上下文和返回值等方面都有不一樣。

凡是沒有形參的構造函數調用均可以省略圓括號。

var o = new Object();
var o = new Object;
//等價

  構造函數調用建立一個新的空對象,這個對象繼承自構造函數的prototype屬性,這個函數試圖初始化這個新建立的對象,病將這個對象作爲上下文,所以構造函數可使用this關鍵字來引用這個新建立的對象。

  • new o.m() 調用的上下文並非o.
  • 構造函數並不使用return。若是構造函數顯示的使用return語句返回一個對象,那麼調用表達式的值就是這個對象。若是構造函數但並無返回值,或者返回一個原始值,那麼就會忽略返回值,同時使用新對象做爲返回結果。

 

間接調用

 

  • call()
  • appy()
相關文章
相關標籤/搜索