欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù))
先看一段簡單的代碼:
復(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)文章

最新評論