Konteks Pelaksanaan & Timbunan Panggilan
Penciptaan konteks pelaksanaan global untuk kod peringkat teratas iaitu kod yang tiada di dalam mana-mana fn. Oleh itu, kod di luar fn dilaksanakan dahulu.
Kod di dalam badan fn fn-decln/exprsn hanya dilaksanakan apabila ia dipanggil.
Konteks Pelaksanaan(EC)
Persekitaran di mana bahagian JS dilaksanakan.
Menyimpan semua maklumat yang diperlukan untuk beberapa kod untuk dilaksanakan seperti pembolehubah tempatan, arg dihantar ke fn.
Kod JS sentiasa berjalan di dalam EC.
Tepat satu EC global tanpa mengira saiz projek JS.
Konteks lalai, dibuat untuk kod bukan dalam mana-mana fn.
Kemudian kod itu dilaksanakan di dalam EC global
Selepas kod peringkat atas dilaksanakan, pelaksanaan fns & menunggu C/bs
Untuk setiap panggilan fn, EC baharu dicipta untuk melaksanakan fn tersebut. Begitu juga dengan kaedah, kerana ia juga dilekatkan pada objek.
Semua EC ini bersama-sama membentuk Tindanan Panggilan.
Apabila semua fns dilaksanakan, enjin menunggu CB tiba & melaksanakannya. Cth. klik panggil balik acara, disediakan oleh gelung acara.
Apa yang ada di dalam EC
- Persekitaran Boleh Ubah yang terdiri daripada
- perisytiharan biarkan, const, var
- Fungsi
objek hujah : menyimpan semua hujah yang dihantar ke fn dalam ECnya.
Setiap fn mendapat EC sendiri seperti yang dipanggil. Dan pembolehubah yang diisytiharkan berakhir dalam persekitaran berubahRantai Skop:
Fns boleh mengakses pembolehubah di luar fns menggunakan rantai skop.
Mengandungi rujukan kepada pembolehubah yang terletak di luar fn semasa dan untuk menjejaki rantai skop, ia disimpan dalam setiap EC.Setiap SPR juga mendapat kata kunci 'ini'.
Ketiga-tiga di atas dijana semasa "Fasa Penciptaan", sejurus sebelum pelaksanaan. Ini perkara yang diperlukan untuk menjalankan kod di peringkat teratas.
Untuk anak panah fns EC:
Kami tidak akan mempunyai: arguments object, kata kunci ini. Anak panah fn gunakan dari fn biasa terdekat mereka, dua di atas.
argumen: tatasusunan seperti objek, mengandungi semua hujah yang dihantar ke fn biasa, bukan anak panah fn.
Panggil Tumpukan Memori Tindanan = Enjin JS
Panggilan Stack
Tempat di mana EC disusun di atas satu sama lain, untuk menjejaki di mana kita berada dalam pelaksanaan. SPR paling atas ialah yang kami jalankan. Apabila pelaksanaan selesai, ia dikeluarkan dari bahagian atas tindanan dan kawalan dipindahkan ke EC asas.
Jika terdapat panggilan fn bersarang, panggilan fn luar akan dijeda untuk mengembalikan hasil pelaksanaan fn dalam pada timbunan panggilan kerana JS hanya mempunyai satu utas pelaksanaan. Kini SPR terdahulu akan menjadi SPR aktif
Kemudian EC yang paling teratas muncul daripada Tindanan Panggilan apabila ia dikembalikan.
Terendah dalam Tindanan Panggilan ialah EC global, di atasnya ialah panggilan fn apabila ia berlaku mengikut urutan.
Memastikan susunan pelaksanaan tidak pernah hilang.
Pada akhirnya, program akan selesai dan EC global juga akan muncul daripada Tindanan Panggilan.
Kod JS berjalan di dalam EC, yang diletakkan pada Tindanan Panggilan.
Hence, we can say that each EC has: 1. Variable environment 2. Scope chain 3. 'this' keyword
Skop
Cara pembolehubah program kami disusun dan diakses oleh JS Engine.
Di manakah pembolehubah hidup
Di manakah kita boleh mengakses pembolehubah tertentu dan di mana tidak.
Skop Leksikal:
JS mempunyai skop leikal yang bermaksud skop dikawal oleh peletakan fns dan blok dalam kod.
Cth. Fn bersarang mempunyai akses kepada pembolehubah fn induknya.
Skop:
Ruang atau env di mana pembolehubah tertentu diisytiharkan(persekitaran pembolehubah dalam kes fns). Ia adalah env pembolehubah yang disimpan dalam fns EC.
Untuk fns, Var env & skop kedua-duanya adalah sama.
Three scopes in JS are: 1. Global scope 2. Fn scope 3. Block scope [ES6]
Skop ialah tempat di mana pembolehubah diisytiharkan. Oleh itu, benar untuk Fns juga kerana fns hanyalah nilai yang disimpan dalam pembolehubah.
Skop Pembolehubah
Wilayah kod kami di mana pembolehubah tertentu boleh diakses.
Skop berbeza daripada skop pembolehubah dengan perbezaan halus.
## Global Scope: For top level code For variables declared outside of any fn or block which are accessible from everywhere Variables in this scope are at the top of scope chain. Hence, can be used by every nested scope.
## Fn Scope: Each fn has creates its own scope Variables are accessible ONLY inside fn, NOT outside. Else Reference Error Also called local scope Fn decln, exprsn, arrow all three create their own scopes. Only way to create scope using ES5 which had only fn & global scope.
## Block Scope: Introduced in ES6, not only fn but {} also create a scope known as block scope which work only for ES6 variables i.e let-const types. DOesn't work for variables declared with 'var' as its fn scoped. Variables accessible only inside block i.e {} This only applies to variables declared with let-const only. Fns are also block scoped in ES6 (only in strict mode, should be used) variables declared using 'var' will be accessible outside the block Scoped to the current fn or the global scope. var variables only care about fn, they ignore blocks. They end up in nearest fn scope.
Setiap skop bersarang mempunyai akses kepada pembolehubah dari skop luarnya & skop global. Perkara yang sama juga berlaku untuk hujah fn.
Jika fn tidak menemui pembolehubah dalam skopnya, ia mencari rantai skop untuk mengetahui pembolehubah dalam skop luarnya. Proses ini dipanggil carian berubah-ubah dalam rantai skop. Ini tidak berfungsi sebaliknya iaitu kita tidak boleh mengakses pembolehubah atau skop fn bersarang dari luar skop fn atau luar.
Skop adik-beradik tidak boleh mengakses pembolehubah satu sama lain
Hanya skop paling dalam boleh mengakses skop luarnya, bukan skop sebaliknya.
Satu EC untuk setiap fn dalam susunan tepat fn dipanggil diletakkan pada Call Stack dengan pembolehubahnya di dalam EC. Global EC berada di bahagian bawah Tindanan Panggilan
Scope chain:
Its all about the order in which fns are written in the code.
Has nothing to do with order in which fns were called.
Scope chain gets the variable environment from the EC.
Order of fn calls is not relevant to the scope chain at all.
const a = 'Alice'; first(); function first(){ const b = "Hello"; second(); function second(){ const c = "Hi"; third(); } } function third(){ const d = "Hey"; console.log(d + c + b + a); // Reference Error } ## Call Stack order: third() EC - top second() EC first() EC global EC - bottom Scope Chain: second() --nested inside--> first() --nested inside--> global scope. third() is independently defined inside gloabal scope. Reference Error occurred because both 'c' as well as 'b' cannot be accessed using the scope chain.
Summary:
E-C, Var Env, Cl-Sk, Scope, Scope-chain are all different but related concepts.
Scoping asks the questions where do variables live, where can we access the variables and where not.
Lexical Scoping in JS: Rules of where we can access variables are based exactly where in the code fns and blocks are written.
Every scope has access to all the variables from all its outer scopes. This is scope chain which is a one-way street. An outer scope can never access variables of inner scope.
Scope chain of a certain scope is equal to adding together all the Var Envs of all the parent scopes.
Scope chain has nothing to do with the order in which fns are called. It does not affect the scope chain at all.
When a variable is not found in current scope, engine looks up the scope chain until it finds the variable its looking for. This is called variable look-up.
Atas ialah kandungan terperinci Konteks Pelaksanaan & Timbunan Panggilan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.

Python lebih sesuai untuk sains data dan automasi, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python berfungsi dengan baik dalam sains data dan pembelajaran mesin, menggunakan perpustakaan seperti numpy dan panda untuk pemprosesan data dan pemodelan. 2. Python adalah ringkas dan cekap dalam automasi dan skrip. 3. JavaScript sangat diperlukan dalam pembangunan front-end dan digunakan untuk membina laman web dinamik dan aplikasi satu halaman. 4. JavaScript memainkan peranan dalam pembangunan back-end melalui Node.js dan menyokong pembangunan stack penuh.
