abstract:本文詳細(xì)介紹了javascript函數(shù)的四種調(diào)用模式。1、介紹先介紹一下函數(shù)的調(diào)用模式有哪四種: 函數(shù)調(diào)用模式, 方法調(diào)用模式, 構(gòu)造函數(shù)調(diào)用模式, 上下文調(diào)用模式;在這里對(duì)于函數(shù)的調(diào)用模式,主要介紹每種調(diào)用模式的this的指向和返回值。2、代碼分析①、函數(shù)調(diào)用模式下面的調(diào)用模式就是大家最熟悉的函數(shù)調(diào)用模式,而函數(shù)調(diào)用模式的this指向和返回值是什么呢?function fn1 
本文詳細(xì)介紹了javascript函數(shù)的四種調(diào)用模式。
1、介紹
先介紹一下函數(shù)的調(diào)用模式有哪四種:
函數(shù)調(diào)用模式,
方法調(diào)用模式,
構(gòu)造函數(shù)調(diào)用模式,
上下文調(diào)用模式;
在這里對(duì)于函數(shù)的調(diào)用模式,主要介紹每種調(diào)用模式的this的指向和返回值。
2、代碼分析
①、函數(shù)調(diào)用模式
下面的調(diào)用模式就是大家最熟悉的函數(shù)調(diào)用模式,而函數(shù)調(diào)用模式的this指向和返回值是什么呢?
function fn1 () { console.log(this); }; fn1(); // 在調(diào)用函數(shù)fn1時(shí),輸出的this的結(jié)果是Window
在上述代碼中,fn1也就是函數(shù)調(diào)用模式中的this是指向Window的,而返回值是由return決定。
可以得出以下結(jié)論(函數(shù)調(diào)用模式中):
a, this是指向Window的
b, 返回值是由return語句決定的,如果沒有return則表示沒有返回值
②、方法調(diào)用模式
var name = "james"; var obj = { name : "wade", fn1 : function () { console.log(this.name); } }; obj.fn1(); // 在調(diào)用obj中的fn1方法函數(shù)時(shí),輸出的是wade
通過上面的代碼結(jié)果分析,會(huì)得到以下結(jié)論(方法調(diào)用模式中):
a, this 是指向調(diào)用該方法的對(duì)象
b, 返回值還是由return語句決定,如果沒有return表示沒有返回值
③、構(gòu)造函數(shù)調(diào)用模式
function Fn () { this.name = "james", this.age = 32, console.log(this) }; var fn1 = new Fn(); // 在調(diào)用這段代碼的時(shí)候,輸出的是Fn {name: "james", age: 32}
通過上面的代碼結(jié)果分析,會(huì)得到以下結(jié)論(構(gòu)造函數(shù)調(diào)用模式中):
a, this是指向構(gòu)造函數(shù)的實(shí)例
b, 如果沒有添加返回值的話,默認(rèn)的返回值是this
但是如果手動(dòng)添加返回值之后呢
function Fn1 () { this.name = "james"; return "wade" }; var fn1 = new Fn1(); console.log(fn1.name); // 這段代碼輸出的是 james; function Fn2 () { this.name = "james"; return [1,2,3]; }; var fn2 = new Fn2(); console.log(fn2.name); // 而這段代碼輸出的是undefined
而通過上面的代碼結(jié)果分析,優(yōu)化上面的結(jié)論:
a, this是指向構(gòu)造函數(shù)的實(shí)例
b, 如果沒有添加返回值的話,默認(rèn)的返回值是this
c, 如果有返回值,且返回值是簡單數(shù)據(jù)類型(Number,String,Boolean··)的話,最后仍回返回this
d, 如果有返回值,且返回值是復(fù)雜數(shù)據(jù)類型(對(duì)象)的話,最終返回該對(duì)象,所以上面的fn2是指向數(shù)組,所以fn2.name為undefined
④、上下文調(diào)用模式
function f1(){ console.log(this); } f1.call(null); // Window f1.call(undefined); // Window f1.call(123); // Number的實(shí)例 f1.call("abc"); // String的實(shí)例 f1.call(true); // Boolean的實(shí)例 f1.call([1,2,3]); // Array的實(shí)例
通過上面的代碼結(jié)果分析,得出以下結(jié)論(上下文調(diào)用模式中):
a, 傳遞的參數(shù)不同,this的指向不同,this會(huì)指向傳入?yún)?shù)的數(shù)據(jù)類型
b, 返回值是由return決定,如果沒有return表示沒有返回值。
更多關(guān)于javascript函數(shù)的四種調(diào)用模式請(qǐng)關(guān)注PHP中文網(wǎng)(ipnx.cn)其他文章!