通常構成函式主題的js**在定義之時是不會被執行的,只有在呼叫函式是才會被執行
有4種方式可以呼叫js函式
//定義函式 factorial
function factorial()
var probability = factorial(5)
以函式形式呼叫的函式通常不適用this關鍵字
方法呼叫和函式呼叫區別在於:呼叫上下文。
如果有一個 函式 f 和 物件 o
給o定義一個m()的方法
o.m = f
給物件o定義方法m(),呼叫時就像這樣
o.m()
其中o就成為呼叫上下文,函式體可以使用關鍵字this引用該物件
一個具體的例子:
var calculator =
};calculator.add();//方法呼叫1+1的結果
calculate.result // => 2
關鍵字this和變數不同,沒有作用域的限制,巢狀的函式不會從呼叫他的函式中繼承this
如果巢狀函式作為方法呼叫,this值指向呼叫它的物件。
如果巢狀函式作為函式呼叫,this指向全域性物件或undefined。
很多人誤認為呼叫巢狀函式時this會指向呼叫外層函式的上下文。
如果你想這個外部函式的this值時,需要將this值儲存在一個變數裡,這個變數和內部函式都在同一作用域內。
var o =
}};
建構函式呼叫與函式呼叫、方法呼叫在實參處理,呼叫上下文和返回值方面都有不同。
建構函式呼叫在圓括號裡包含實參列表,則先計算實參表示式,這與函式呼叫和方法呼叫是一致的。
如果建構函式沒有形參,js建構函式呼叫語法是可以省略()的
var o = new object();
var o = new object;//等價
建構函式呼叫建立一個空物件,繼承自建構函式prototype屬性,建構函式試圖初始這個新建立的物件,作為其呼叫的上下文,因此,建構函式可以使用this來引用這個新建立的物件。
建構函式通常不使用return,當執行完函式體後,會顯示返回。
var args = [girl1, girl2];var animal = new animal();