js當(dāng)一個變量為函數(shù)時(shí) 應(yīng)該注意的一點(diǎn)細(xì)節(jié)小結(jié)
更新時(shí)間:2011年12月29日 00:44:47 作者:
變量testFun為一個匿名函數(shù),匿名函數(shù)返回的一個testFun.init對象(也是一個匿名函數(shù))
先看一段簡單的代碼:
var testFun=function (name,age){
var job='Flash Develop';
return new testFun.init(name,age,job);
}
testFun.init=function(name,age,job){
return 'name:'+name+',age:'+age+',job:'+job+'';
}
alert(testFun('vincent',30)); //[object Object]
代碼很簡單,變量testFun為一個匿名函數(shù),匿名函數(shù)返回的一個testFun.init對象(也是一個匿名函數(shù))。但對于一些新手有時(shí)會誤解為:testFun是返回的一個testFun.init對象。他可能會這樣想,在匿名函數(shù)function(name,age)構(gòu)建過程中,又用到了testFun. 此時(shí)testFun還在構(gòu)建中,應(yīng)該還沒有存在,testFun.init更沒有存在,怎么就可以用testFun.init呢?
其實(shí)這樣想是存在了一個誤區(qū):把testFun與testFun()等同起來了,如果testFun是返回的一個testFun.init對象,代碼應(yīng)該是testFun=function(name,age){… …}()。正確的理解應(yīng)該是這樣的,testFun只是一個函數(shù),當(dāng)你把一個函數(shù)賦于它時(shí),它就已經(jīng)存在了,哪怕函數(shù)返回的是undefined或null,它本身仍然是Function,只有testFun()執(zhí)行后返回值才是undefined或null。返回值是testFun()執(zhí)行的結(jié)果,結(jié)果返回后,就不再與testFun有任何關(guān)系。如:
var testFun=function(){
return undefined;
}
var result=testFun();
alert(testFun); // function () {return undefined;}
alert(result); // undefined result與testFun不再有任何關(guān)系
所以,當(dāng)賦于testFun一個匿名函數(shù)后,它就一直存在著,直到賦于它另外一個值。對于testFun.init你可以這樣簡單的去理解:
testFun.init=function(name,age){}.init=function(name,age.job){… …}
綜上所述,回頭再看testFun是一個函數(shù),而testFun()則是(function(name,age,job){return 'name:'+name+',age:'+age+',job:'+job+''; })()
為了便于理解,可以把代碼精簡為:
var testFun=function(){}
testFun.init=function(){}
只是testFun()沒有返回一個testFun.init對象罷了。
復(fù)制代碼 代碼如下:
var testFun=function (name,age){
var job='Flash Develop';
return new testFun.init(name,age,job);
}
testFun.init=function(name,age,job){
return 'name:'+name+',age:'+age+',job:'+job+'';
}
alert(testFun('vincent',30)); //[object Object]
代碼很簡單,變量testFun為一個匿名函數(shù),匿名函數(shù)返回的一個testFun.init對象(也是一個匿名函數(shù))。但對于一些新手有時(shí)會誤解為:testFun是返回的一個testFun.init對象。他可能會這樣想,在匿名函數(shù)function(name,age)構(gòu)建過程中,又用到了testFun. 此時(shí)testFun還在構(gòu)建中,應(yīng)該還沒有存在,testFun.init更沒有存在,怎么就可以用testFun.init呢?
其實(shí)這樣想是存在了一個誤區(qū):把testFun與testFun()等同起來了,如果testFun是返回的一個testFun.init對象,代碼應(yīng)該是testFun=function(name,age){… …}()。正確的理解應(yīng)該是這樣的,testFun只是一個函數(shù),當(dāng)你把一個函數(shù)賦于它時(shí),它就已經(jīng)存在了,哪怕函數(shù)返回的是undefined或null,它本身仍然是Function,只有testFun()執(zhí)行后返回值才是undefined或null。返回值是testFun()執(zhí)行的結(jié)果,結(jié)果返回后,就不再與testFun有任何關(guān)系。如:
復(fù)制代碼 代碼如下:
var testFun=function(){
return undefined;
}
var result=testFun();
alert(testFun); // function () {return undefined;}
alert(result); // undefined result與testFun不再有任何關(guān)系
所以,當(dāng)賦于testFun一個匿名函數(shù)后,它就一直存在著,直到賦于它另外一個值。對于testFun.init你可以這樣簡單的去理解:
testFun.init=function(name,age){}.init=function(name,age.job){… …}
綜上所述,回頭再看testFun是一個函數(shù),而testFun()則是(function(name,age,job){return 'name:'+name+',age:'+age+',job:'+job+''; })()
為了便于理解,可以把代碼精簡為:
復(fù)制代碼 代碼如下:
var testFun=function(){}
testFun.init=function(){}
只是testFun()沒有返回一個testFun.init對象罷了。
相關(guān)文章
如何在postman測試用例中實(shí)現(xiàn)斷言過程解析
這篇文章主要介紹了如何在postman測試用例中實(shí)現(xiàn)斷言過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07詳解Js 根據(jù)文件夾目錄獲取Json數(shù)據(jù)輸出demo
這篇文章主要為大家介紹了Js 根據(jù)文件夾目錄獲取Json數(shù)據(jù)輸出示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03解決select2在bootstrap modal中不能正常使用的問題
今天小編就為大家分享一篇解決select2在bootstrap modal中不能正常使用的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08微信小程序?qū)崿F(xiàn)點(diǎn)贊、取消點(diǎn)贊功能
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)點(diǎn)贊、取消點(diǎn)贊,和多項(xiàng)點(diǎn)擊功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11javascript實(shí)現(xiàn)控制的多級下拉菜單
這篇文章主要介紹了javascript實(shí)現(xiàn)控制的多級下拉菜單,包含示例代碼,效果非常不錯,這里推薦給大家。2015-07-07BootStrap 超鏈接變按鈕的實(shí)現(xiàn)方法
這篇文章主要介紹了BootStrap 超鏈接變按鈕的實(shí)現(xiàn)方法以及js按鈕bootstrap超鏈接的操作方法,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09