欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長(zhǎng)資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          javascript有main函數(shù)嗎

          javascript中沒(méi)有main函數(shù)。main函數(shù)常用于Java與C語(yǔ)言中,又稱(chēng)主函數(shù),是要求有返回值的,返回0代表程序正常執(zhí)行成功,返回非0值代表程序異常結(jié)束;而在JavaScript中不存在該函數(shù)。

          javascript有main函數(shù)嗎

          本教程操作環(huán)境:windows10系統(tǒng)、javascript1.8.5版、Dell G3電腦。

          javascript有main函數(shù)嗎

          javascript沒(méi)有main函數(shù)

          簡(jiǎn)介

          main函數(shù),又稱(chēng)主函數(shù),作為絕大部分C程序唯一的入口,是要求有返回值的,該返回值返回給(如操作系統(tǒng))來(lái)表明該程序的執(zhí)行狀況。返回0代表程序正常執(zhí)行成功,返回非0值代表程序異常結(jié)束,因此返回值需要是int整型,于是有了int main()的規(guī)范。

          如果使用void main(),即聲明主函數(shù)沒(méi)有返回值,程序雖能編譯、運(yùn)行成功,卻不利于程序的激活者判斷其狀態(tài),這對(duì)于有很多C程序構(gòu)成的大型項(xiàng)目來(lái)說(shuō)是可能是致命的。

          尤其從C99標(biāo)準(zhǔn)(1999年制定的官方C語(yǔ)言標(biāo)準(zhǔn)第二版)開(kāi)始必須使用int main(),如果沒(méi)有加return 0;語(yǔ)言,C99要求編譯器自動(dòng)添加(自己寫(xiě)上是個(gè)好習(xí)慣)。只聲明main()的話(huà),系統(tǒng)默認(rèn)為int main()。void main()無(wú)論何時(shí)都不應(yīng)該使用,因?yàn)橹骱瘮?shù)必須有返回值表明程序的運(yùn)行狀態(tài)(在代碼中不使用void main()是一個(gè)良好的習(xí)慣)。

          定義

          在最新的C99標(biāo)準(zhǔn)中,只有以下兩種定義方式是正確的:

          int main(void) int main(int argc, char *argv[]) // char *argv[]可以寫(xiě)成char **argv

          參數(shù)

          void:不接受任何參數(shù);

          argc:代表程序所運(yùn)行環(huán)境傳遞給程序的參數(shù)數(shù)量;

          argv:指向argc+1個(gè)指針的數(shù)組的首元素的指針。數(shù)組末元素為空指針,而若前面有元素,則它們指向表示從宿主環(huán)境傳遞給程序的參數(shù)的字符串。若argv[0]不是空指針(或argc>0),則它指向表示程序名的字符串。若程序名從宿主環(huán)境不可用則該字符串為空。

          返回值

          返回值會(huì)用作隱式調(diào)用exit()的參數(shù),值0和EXIT_SUCCESS指示成功終止,值非0和EXIT_FAILURE指示不成功終止。

          示例如下:在JavaScript中虛構(gòu)一個(gè)main函數(shù)

          在C和Java中,都有一個(gè)程序的入口函數(shù)或方法,即main函數(shù)或main方法。而在JavaScript中,程序是從JS源文件的頭部開(kāi)始運(yùn)行的。但是某種意義上,我們?nèi)匀豢梢蕴摌?gòu)出一個(gè)main函數(shù)來(lái)作為程序的起點(diǎn),這樣一來(lái)不僅可以跟其他語(yǔ)言統(tǒng)一了,而且說(shuō)不定你會(huì)對(duì)JS有更深的理解。

          1. 實(shí)際的入口

          當(dāng)把一個(gè)JavaScript文件交給JS引擎執(zhí)行時(shí),JS引擎就是從上到下逐條執(zhí)行每條語(yǔ)句的,直到執(zhí)行完所有代碼。

          2. 作用域鏈、全局作用域和全局對(duì)象

          我們知道,JS中的每個(gè)函數(shù)在執(zhí)行時(shí)都會(huì)產(chǎn)生一個(gè)新的作用域。具體來(lái)說(shuō),在執(zhí)行流程進(jìn)入函數(shù)時(shí)會(huì)建立一個(gè)新的作用域,在函數(shù)執(zhí)行完成退出時(shí)會(huì)銷(xiāo)毀這個(gè)作用域。函數(shù)的形參、局部變量都會(huì)綁定到這個(gè)作用域里,當(dāng)函數(shù)調(diào)用完成作用域銷(xiāo)毀時(shí),它們隨之被銷(xiāo)毀。當(dāng)然在特殊情況下,如果函數(shù)返回時(shí)作用域中的某些變量仍然被引用,那么作用域以及這些被引用的變量就不會(huì)被銷(xiāo)毀,從而形成所謂的閉包。

          另一方面,我們知道函數(shù)是可以嵌套的,因而作用域也是可以嵌套的。函數(shù)在定義的時(shí)候,JS引擎會(huì)給每個(gè)函數(shù)設(shè)置一個(gè)稱(chēng)為[[scope]]內(nèi)置屬性,它指向外部函數(shù)的詞法作用域。通過(guò)這種方式,多個(gè)作用域形成了鏈?zhǔn)浇Y(jié)構(gòu),稱(chēng)為作用域鏈。通常情況下,在任意時(shí)刻只存在一條作用域鏈,即從正在執(zhí)行的函數(shù)的作用域開(kāi)始,層層上溯,直到最外層的全局作用域。

          [注]:作用域鏈上的函數(shù)就是JS源碼里的層層嵌套的函數(shù),跟函數(shù)執(zhí)行時(shí)的順序或函數(shù)調(diào)用棧無(wú)關(guān),這也是詞法作用域這個(gè)稱(chēng)呼的由來(lái)。

          全局作用域是一個(gè)特殊的作用域,它不是一個(gè)函數(shù)作用域,但它是所有函數(shù)作用域的外層作用域,也是所有作用域鏈的終點(diǎn)。因此只要程序沒(méi)有退出,全局作用域總是存在的,全局作用域內(nèi)的變量也是一直有效的。

          [函數(shù)3的作用域]–>[函數(shù)2的作用域]–>[函數(shù)3的作用域]–>[全局作用域]

          另外,對(duì)應(yīng)于全局作用域,還有一個(gè)全局對(duì)象。在瀏覽器中,全局對(duì)象就是window對(duì)象。全局對(duì)象是個(gè)特殊的對(duì)象:

          在全局作用域中定義的變量,都會(huì)綁定到全局對(duì)象。

          在任意作用域中定義的變量,如果定義時(shí)沒(méi)有用 var 關(guān)鍵字,都會(huì)綁定到全局對(duì)象。

          在全局作用域中, this 指向全局對(duì)象。

          從上面列舉的這些特性可以看出,如果把全局作用域當(dāng)成一個(gè)對(duì)象的話(huà),那么實(shí)際上它就是全局對(duì)象。另外,這也解釋了在全局作用域中,下面的四條語(yǔ)句為什么是等價(jià)的:

          var a = 1; a = 1; window.a = 1; this.a = 1;

          3. 虛構(gòu)的main函數(shù)

          既然都是作用域,為什么要有一個(gè)特殊的全局作用域呢?我們總是喜歡簡(jiǎn)單化、一致性,而盡量避免復(fù)雜化、特殊性。所以很自然地,我們會(huì)想能否讓全局作用域看起來(lái)跟函數(shù)作用域沒(méi)什么區(qū)別?答案是肯定的。我們可以做這樣的構(gòu)想:

          我們想象,在JS引擎執(zhí)行源文件時(shí),會(huì)將文件中的代碼包裝到一個(gè)叫做main的函數(shù)中。然后把這個(gè)main函數(shù)作為程序的入口。

          也就是說(shuō),假設(shè)一個(gè)JS文件中有這樣的代碼:

          var a = 1; var b = 2;   function add(x, y) {   var z = x + y;   return z; } console.log(add(a, b));

          JS引擎在程序開(kāi)始執(zhí)行前會(huì)把它包裝成一個(gè)main函數(shù):

          // 虛構(gòu)的main函數(shù) function main() {   var a = 1;   var b = 2;     function add(x, y) {     var z = x + y;     return z;   }     console.log(add(a, b)); }

          然后,調(diào)用這個(gè)main函數(shù):

          main._current_scope_ = window; // 將全局作用域(對(duì)象)設(shè)為window main.call(window) // 將this指向window

          4. 意義何在?

          (1) JS也有了入口函數(shù)main,跟其他語(yǔ)言一致了。

          (2) 省去了全局作用域的概念,或者說(shuō)全局作用域也成了函數(shù)作用域。

          (3) 通過(guò)上面對(duì)main函數(shù)的調(diào)用過(guò)程,可以明白全局作用域中的那些特殊性質(zhì)的由來(lái)。

          (4) 最后一點(diǎn),將所有JS源碼當(dāng)成一個(gè)函數(shù),是為了后面講事件隊(duì)列、事件循環(huán)做鋪墊。

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)