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

js當(dāng)一個(gè)變量為函數(shù)時(shí) 應(yīng)該注意的一點(diǎn)細(xì)節(jié)小結(jié)

 更新時(shí)間:2011年12月29日 00:44:47   作者:  
變量testFun為一個(gè)匿名函數(shù),匿名函數(shù)返回的一個(gè)testFun.init對(duì)象(也是一個(gè)匿名函數(shù))
先看一段簡(jiǎn)單的代碼:
復(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]

代碼很簡(jiǎn)單,變量testFun為一個(gè)匿名函數(shù),匿名函數(shù)返回的一個(gè)testFun.init對(duì)象(也是一個(gè)匿名函數(shù))。但對(duì)于一些新手有時(shí)會(huì)誤解為:testFun是返回的一個(gè)testFun.init對(duì)象。他可能會(huì)這樣想,在匿名函數(shù)function(name,age)構(gòu)建過(guò)程中,又用到了testFun. 此時(shí)testFun還在構(gòu)建中,應(yīng)該還沒(méi)有存在,testFun.init更沒(méi)有存在,怎么就可以用testFun.init呢?

其實(shí)這樣想是存在了一個(gè)誤區(qū):把testFun與testFun()等同起來(lái)了,如果testFun是返回的一個(gè)testFun.init對(duì)象,代碼應(yīng)該是testFun=function(name,age){… …}()。正確的理解應(yīng)該是這樣的,testFun只是一個(gè)函數(shù),當(dāng)你把一個(gè)函數(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一個(gè)匿名函數(shù)后,它就一直存在著,直到賦于它另外一個(gè)值。對(duì)于testFun.init你可以這樣簡(jiǎn)單的去理解:
testFun.init=function(name,age){}.init=function(name,age.job){… …}
綜上所述,回頭再看testFun是一個(gè)函數(shù),而testFun()則是(function(name,age,job){return 'name:'+name+',age:'+age+',job:'+job+''; })()
為了便于理解,可以把代碼精簡(jiǎn)為:
復(fù)制代碼 代碼如下:

var testFun=function(){}
testFun.init=function(){}

只是testFun()沒(méi)有返回一個(gè)testFun.init對(duì)象罷了。

相關(guān)文章

最新評(píng)論