JavaScript中具名函數(shù)的多種調(diào)用方式總結(jié)
前面有一篇提到了 匿名函數(shù)的多種調(diào)用方式。這篇看看具名函數(shù)的多種調(diào)用方式。
1、()
平時最常用的就是()運算符來調(diào)用/執(zhí)行一個函數(shù):
// 無參函數(shù)fun1
function fun1() {
alert('我被調(diào)用了');
}
fun1();
// 有參函數(shù)fun2
function fun2(param) {
alert(param);
}
fun2('我被調(diào)用了');
ECMAScript3后加入給Function加入了call和apply后,就有了下面兩種。
2、call
// 無參函數(shù)fun1
function fun1() {
alert('我被調(diào)用了');
}
fun1.call(null);
// 有參函數(shù)fun2
function fun2(param) {
alert(param);
}
fun2.call(null,'我被調(diào)用了')
3、apply
// 無參函數(shù)fun1
function fun1() {
alert('我被調(diào)用了');
}
fun1.apply(null);
// 有參函數(shù)fun2
function fun2(param) {
alert(param);
}
fun2.apply(null,['我被調(diào)用了'])
雖然call,apply可以純粹的用來調(diào)用/執(zhí)行函數(shù),但它們更多是用來改變函數(shù)執(zhí)行的上下文。
4、new (不推薦使用這種方式哦 )
// 無參函數(shù)fun1
function fun1() {
alert('我被調(diào)用了');
}
new fun1();
// 有參函數(shù)fun2
function fun2(param) {
alert(param);
}
new fun2('我被調(diào)用了')
new的本質(zhì)是用來創(chuàng)建/構(gòu)造一個類的實例,這里定義的fun1,fun2明顯不是一個類(沒有this,沒有prototype)。但兩個函數(shù)確實執(zhí)行了。這是new的副作用。
從以上調(diào)用方式上看四種方式執(zhí)行結(jié)果沒有區(qū)別。但如果函數(shù)有返回值的話,用new方式調(diào)用時可能會讓你有些失望。
// 有返回值的函數(shù)fun
function fun() {
alert('我被調(diào)用了');
return "jack";
}
var c = new fun();
alert(c);//[object Object],為什么不是"jack"?
改成這樣
// 有返回值的函數(shù)fun
function fun() {
alert('我被調(diào)用了');
return {name:'jack'};
}
var c = new fun();
alert(c.name); //jack,又正常返回了
總結(jié)下:用new方式調(diào)用函數(shù)時。如果存在返回值,當(dāng)返回值是JavaScript的內(nèi)置類型(基本類型)如字符串(String),數(shù)字(Number),布爾(Boolean)等時,將不會返回該值;當(dāng)返回值是對象,函數(shù),數(shù)組等對象類型時,將直接返回該對象,函數(shù),數(shù)組。
當(dāng)返回值是內(nèi)置類型(基本類型)時,new fun()到底返回什么呢?下一篇將討論new方式調(diào)用的細節(jié)。
相關(guān)文章
web網(wǎng)頁按比例顯示圖片實現(xiàn)原理及js代碼
由于上傳圖片的大小是未知的,在顯示成縮略圖的時候必須進行按比例的縮放才能美觀地顯示,本文將為大家簡單的介紹一種比較不錯的方法,有此需求的朋友可以參考下2013-08-08
JS使用JSON.parse(),JSON.stringify()實現(xiàn)對對象的深拷貝功能分析
這篇文章主要介紹了JS使用JSON.parse(),JSON.stringify()實現(xiàn)對對象的深拷貝功能,結(jié)合實例形式分析了JSON.parse()與JSON.stringify()方法實現(xiàn)深拷貝的相關(guān)實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下2019-03-03
javascript實現(xiàn)用戶管理系統(tǒng)
這篇文章主要為大家詳細介紹了javascript實現(xiàn)用戶管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-06-06
JavaScript高級程序設(shè)計 閱讀筆記(二十一) JavaScript中的XML
雖然XML和DOM已經(jīng)變成Web開發(fā)的重要組成部分,但目前僅IE跟Mozilla支持客戶端的XML處理2012-09-09
詳解微信圖片防盜鏈“此圖片來自微信公眾平臺 未經(jīng)允許不得引用”的解決方案
這篇文章主要介紹了詳解微信圖片防盜鏈“此圖片來自微信公眾平臺 未經(jīng)允許不得引用”的解決方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04

