function Foo1() { alert(This is Foo1.); } 和 Foo2(); var Foo2 = function() { alert(This is Foo2.); }
運(yùn)行第一個(gè)顯然是不會有任何錯(cuò)誤的,可是運(yùn)行第二個(gè)就有問題了,這時(shí)系統(tǒng)會說:Microsoft JScript runtime error: Object expected。這就是說函數(shù)定義(Foo1)在腳本解析器中有最高的初始化優(yōu)先級,這個(gè)很好理解。如果不優(yōu)先處理函數(shù),那么對于函數(shù)中的函數(shù)調(diào)用就沒有辦法處理了,假使我們先定fn1()再定義fn2(),卻從fn1中調(diào)fn2,那么就通不過解析了。為什么Foo2不能被初始化,F(xiàn)oo2的定義根本不是函數(shù)定義,它是一個(gè)標(biāo)準(zhǔn)的賦值語句,之所以能象標(biāo)準(zhǔn)函數(shù)一樣的使用Foo2(Foo2()),完全是因?yàn)樗赶虻氖且粋€(gè)函數(shù)對象的實(shí)例而已。 再來看原形方法導(dǎo)入里的兩種方式,就很簡單了。并且不同的執(zhí)行優(yōu)先循序,也決了它們在使用中的不同,看如下示例: <script language="javascript"> function NormalClass() { this.m_Property1 = P1 in Normal Class.; this.m_Property2 = P2 in Normal Class.;