Rumah >hujung hadapan web >Soal Jawab bahagian hadapan >Adakah javascript mempunyai fungsi utama?
Tiada fungsi utama dalam JavaScript. Fungsi utama sering digunakan dalam bahasa Java dan C Ia juga dipanggil fungsi utama dan diperlukan untuk mempunyai nilai pulangan 0 bermakna program berjaya dilaksanakan secara normal, dan mengembalikan nilai bukan 0 bermakna program itu. berakhir secara tidak normal; tetapi fungsi ini tidak wujud dalam JavaScript.
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi JavaScript 1.8.5, komputer Dell G3.
Javascript tidak mempunyai fungsi utama
Pengenalan
fungsi utama, dan Dipanggil fungsi utama, sebagai satu-satunya titik masuk untuk kebanyakan program C, ia perlu mempunyai nilai pulangan yang dikembalikan kepada (seperti sistem pengendalian) untuk menunjukkan status pelaksanaan program . Mengembalikan 0 bermakna program berjaya dilaksanakan secara normal, dan mengembalikan nilai bukan 0 bermakna program berakhir secara tidak normal Oleh itu, nilai pulangan perlu menjadi jenis integer, jadi terdapat spesifikasi int main().
Jika anda menggunakan void main(), yang bermaksud fungsi utama tidak mempunyai nilai pulangan, walaupun program boleh disusun dan dijalankan dengan jayanya, ia tidak kondusif untuk pengaktif program menilai statusnya tidak sesuai untuk projek besar yang terdiri daripada banyak program C. Ia boleh membawa maut.
Terutama bermula daripada standard C99 (edisi kedua standard bahasa C rasmi yang dirumuskan pada tahun 1999), int main() mesti digunakan Jika bahasa pulangan 0 tidak ditambahkan, C99 memerlukan pengkompil secara automatik menambahnya (tulis sendiri adalah tabiat yang baik). Jika hanya main() diisytiharkan, sistem lalai kepada int main(). void main() tidak boleh digunakan kerana fungsi utama mesti mempunyai nilai pulangan untuk menunjukkan status berjalan program (adalah tabiat yang baik untuk tidak menggunakan void main() dalam kod anda).
Definisi
Dalam standard C99 terkini, hanya dua takrifan berikut adalah betul:
int main(void) int main(int argc, char *argv[]) // char *argv[]可以写成char **argv
Parameter
kosong : tidak menerima sebarang parameter;
argc: mewakili bilangan parameter yang dihantar kepada program oleh persekitaran di mana atur cara dijalankan; tatasusunan argc 1 penunjuk. Elemen terakhir tatasusunan ialah penuding nol, dan jika terdapat elemen sebelumnya, ia menunjuk kepada rentetan yang mewakili parameter yang dihantar kepada program daripada persekitaran hos. Jika argv[0] bukan penunjuk nol (atau argc>0), ia menunjuk kepada rentetan yang mewakili nama program. Rentetan ini kosong jika nama program tidak tersedia daripada persekitaran hos.
Nilai pulangan
Nilai pulangan akan digunakan sebagai parameter untuk panggilan tersirat untuk keluar( Nilai 0 dan EXIT_SUCCESS menunjukkan penamatan yang berjaya, dan nilai selain daripada 0). dan EXIT_FAILURE menunjukkan penamatan yang tidak berjaya.
Contohnya seperti berikut: Buat fungsi utama dalam JavaScript
Dalam C dan Java, terdapat fungsi entri untuk atur cara Atau kaedah, iaitu fungsi utama atau kaedah utama. Dalam JavaScript, program dijalankan dari kepala fail sumber JS. Tetapi dari satu segi, kita masih boleh menjadikan fungsi utama sebagai titik permulaan program Dengan cara ini, ia bukan sahaja boleh disatukan dengan bahasa lain, tetapi mungkin anda akan mempunyai pemahaman yang lebih mendalam tentang JS.
Apabila fail JavaScript diserahkan kepada enjin JS untuk dilaksanakan, enjin JS melaksanakan setiap pernyataan satu demi satu dari atas ke bawah sehingga ke bawah Semua kod dilaksanakan.
2. Rantaian skop, skop global dan objek globalKami tahu bahawa setiap fungsi dalam JS akan menjana skop baharu apabila dilaksanakan. Khususnya, skop baharu akan dibuat apabila aliran pelaksanaan memasuki fungsi, dan skop ini akan dimusnahkan apabila pelaksanaan fungsi selesai dan keluar. Parameter formal dan pembolehubah tempatan fungsi akan terikat pada skop ini Apabila panggilan fungsi melengkapkan pemusnahan skop, ia akan dimusnahkan dengan sewajarnya. Sudah tentu, dalam kes khas, jika beberapa pembolehubah dalam skop masih dirujuk apabila fungsi kembali, skop dan pembolehubah yang dirujuk ini tidak akan dimusnahkan, membentuk penutupan yang dipanggil.
Sebaliknya, kita tahu bahawa fungsi boleh bersarang, jadi skop juga boleh bersarang. Apabila fungsi ditakrifkan, enjin JS akan menetapkan atribut terbina dalam yang dipanggil [[skop]] untuk setiap fungsi, yang menunjuk kepada skop leksikal fungsi luaran. Dengan cara ini, berbilang skop membentuk struktur rantai yang dipanggil rantai skop. Biasanya, hanya terdapat satu rantai skop pada bila-bila masa, iaitu, bermula dari skop fungsi pelaksana dan menjejak lapisan ke atas demi lapisan sehingga skop global paling luar.
[Nota]: Fungsi pada rantai skop ialah fungsi bersarang lapisan demi lapisan dalam kod sumber JS ia tidak ada kaitan dengan susunan fungsi tersebut dilaksanakan atau timbunan panggilan fungsi asal usul skop leksikal nama.
Skop global ialah skop khas Ia bukan skop fungsi, tetapi ia adalah skop luar semua skop fungsi dan titik akhir semua rantai skop. Oleh itu, selagi program tidak keluar, skop global sentiasa wujud, dan pembolehubah dalam skop global sentiasa sah.
[Skop fungsi 3]-->[Skop fungsi 2]-->[Skop fungsi 3]-->[Skop global]
Selain itu, sepadan kepada skop global, terdapat objek global. Dalam pelayar, objek global ialah objek tetingkap. Objek global ialah objek khas:
Pembolehubah yang ditakrifkan dalam skop global akan terikat pada objek global.
在任意作用域中定义的变量,如果定义时没有用 var 关键字,都会绑定到全局对象。
在全局作用域中, this 指向全局对象。
从上面列举的这些特性可以看出,如果把全局作用域当成一个对象的话,那么实际上它就是全局对象。另外,这也解释了在全局作用域中,下面的四条语句为什么是等价的:
var a = 1; a = 1; window.a = 1; this.a = 1;
3. 虚构的main函数
既然都是作用域,为什么要有一个特殊的全局作用域呢?我们总是喜欢简单化、一致性,而尽量避免复杂化、特殊性。所以很自然地,我们会想能否让全局作用域看起来跟函数作用域没什么区别?答案是肯定的。我们可以做这样的构想:
我们想象,在JS引擎执行源文件时,会将文件中的代码包装到一个叫做main的函数中。然后把这个main函数作为程序的入口。
也就是说,假设一个JS文件中有这样的代码:
var a = 1; var b = 2; function add(x, y) { var z = x + y; return z; } console.log(add(a, b));
JS引擎在程序开始执行前会把它包装成一个main函数:
// 虚构的main函数 function main() { var a = 1; var b = 2; function add(x, y) { var z = x + y; return z; } console.log(add(a, b)); }
然后,调用这个main函数:
main._current_scope_ = window; // 将全局作用域(对象)设为window main.call(window) // 将this指向window
4. 意义何在?
(1) JS也有了入口函数main,跟其他语言一致了。
(2) 省去了全局作用域的概念,或者说全局作用域也成了函数作用域。
(3) 通过上面对main函数的调用过程,可以明白全局作用域中的那些特殊性质的由来。
(4) 最后一点,将所有JS源码当成一个函数,是为了后面讲事件队列、事件循环做铺垫。
相关推荐:javascript学习教程
Atas ialah kandungan terperinci Adakah javascript mempunyai fungsi utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!