cari
Rumahhujung hadapan webtutorial jsKonteks Perlaksanaan JavaScript – Cara Kod JS Berjalan Di Belakang Tabir

Sebelum memahami apa itu Konteks Pelaksanaan JavaScript, kita perlu tahu bagaimana dan dalam persekitaran mana kita boleh menjalankan kod JavaScript.

Pertama sekali, kami boleh menjalankan JavaScript dalam dua persekitaran:

  1. Melalui Penyemak Imbas
  2. Melalui Node.js

Bagaimanakah kod JavaScript dijalankan pada komputer kami?

Apabila kami menulis kod JavaScript pada komputer kami dan kemudian cuba menjalankannya, kod tersebut mula-mula pergi ke sama ada Penyemak Imbas atau Node.js.

Walau bagaimanapun, kod JavaScript yang kami tulis tidak difahami secara langsung oleh Penyemak Imbas atau Node.js. Pada ketika ini, kedua-duanya menghantar kod ke Enjin JavaScript yang terbina di dalamnya. Terdapat pelbagai jenis enjin, contohnya:

  1. Enjin V8 dalam Google Chrome,
  2. SpiderMonkey dalam Mozilla Firefox,
  3. Enjin V8 dalam Node.js, dsb.

Seterusnya, Enjin JavaScript menyusun kod JavaScript ke dalam kod mesin. Kod mesin ini kemudiannya dihantar ke komputer, yang melaksanakannya, dan kami melihat output dipaparkan.

Sebagai pengaturcara, kita perlu mempunyai pemahaman yang baik tentang langkah perantaraan ini, iaitu, cara Enjin JavaScript menyusun kod JavaScript ke dalam kod mesin.

Jadi, sekarang kita perlu memahami cara Enjin JavaScript berfungsi. Enjin JavaScript berfungsi dalam dua cara untuk menukar kod kepada kod mesin. Yang pertama ialah Tafsiran dan yang kedua ialah Kompilasi. Jadi, apakah itu Tafsiran dan Kompilasi?

Apakah Tafsiran, dan Bagaimana Ia Berfungsi?

Tafsiran ialah proses membaca semua kod sumber yang ditulis dalam bahasa peringkat tinggi baris demi baris dan menukar setiap baris kepada kod mesin serta-merta selepas membacanya. Jika terdapat ralat semasa membaca baris kod, prosesnya berhenti di situ, memudahkan pengaturcara mengenal pasti ralat tersebut. Ini menjadikan penyahpepijatan menjadi mudah. Walau bagaimanapun, memandangkan proses ini membaca kod baris demi baris, ia adalah lebih perlahan.

Apakah Kompilasi, dan Bagaimana Ia Berfungsi?

Kompilasi ialah proses menukar semua kod sumber yang ditulis dalam bahasa peringkat tinggi kepada kod mesin sekaligus. Dalam kes ini, walaupun terdapat ralat dalam kod, ia masih akan menyusun dan hanya menunjukkan ralat semasa runtime. Akibatnya, ia menjadi lebih sukar bagi pengaturcara untuk mengenal pasti ralat, menjadikan penyahpepijatan lebih mencabar. Walau bagaimanapun, memandangkan keseluruhan kod sumber ditukar kepada kod mesin sekaligus, proses ini secara perbandingan lebih pantas. Jadi sekarang, persoalan timbul: Adakah JavaScript adalah bahasa yang disusun atau ditafsirkan?

Adakah JavaScript Bahasa yang Disusun atau Ditafsirkan?

Pada mulanya, JavaScript dianggap sebagai bahasa yang ditafsirkan. Walau bagaimanapun, memandangkan proses ini agak perlahan, enjin JavaScript moden mula menggunakan teknik baharu yang menggabungkan kedua-dua tafsiran dan kompilasi, yang dikenali sebagai Kompilasi Just-In-Time (JIT). Proses ini menggabungkan tafsiran dan penyusunan untuk menukar kod kepada kod mesin. Akibatnya, ia adalah lebih cepat dan lebih mudah untuk nyahpepijat berbanding kaedah lama.

Untuk memahami cara Kompilasi Just-In-Time (JIT) JavaScript berfungsi, kita perlu memahami Konteks Pelaksanaan JavaScript. Sekarang mari cuba memahami Konteks Pelaksanaan JavaScript.

Konteks Perlaksanaan JavaScript

Mula-mula, lihat contoh kod berikut.

Contoh Kod

var a = 1;

function one() {
  console.log(a);

  function two() {
    console.log(b);

    var b = 2;

    function three(c) {
      console.log(a + b + c);
    }

    three(4);
  }

  two();
}

one();

Keluaran

1
undefined
7

Apabila kami menjalankan kod, kami cuba mencetak pembolehubah b sebelum ia diisytiharkan dalam fungsi two(), dan output tidak ditentukan. Namun, tiada ralat berlaku. Persoalannya timbul: bagaimana pembolehubah b mempunyai nilai yang tidak ditentukan? Jawapannya terletak pada Konteks Pelaksanaan JavaScript. Kini, kami akan meneroka Konteks Pelaksanaan JavaScript dengan lebih terperinci.

Terdapat dua jenis Konteks Pelaksanaan dalam JavaScript:

  1. Konteks Pelaksanaan Global
  2. Konteks Pelaksanaan Fungsi

Setiap Konteks Pelaksanaan melalui dua fasa: Fasa Penciptaan dan Fasa Pelaksanaan.

Konteks Pelaksanaan Global

Apabila kami menjalankan kod JavaScript, perkara pertama yang berlaku ialah Konteks Pelaksanaan Global. Konteks ini mula-mula melalui Fasa Penciptaannya, di mana beberapa perkara berlaku:

Fasa Penciptaan

  1. Objek Global dicipta.
  2. Objek ini dicipta dan diberikan nilai Objek Global.
  3. Objek Pembolehubah dicipta, di mana semua fungsi dan pembolehubah diisytiharkan. Pembolehubah diperuntukkan tidak ditentukan sebagai nilainya dan fungsi diperuntukkan rujukan kepada fungsi masing-masing.

Setelah Fasa Penciptaan selesai, Konteks Pelaksanaan Global beralih ke fasa seterusnya: Fasa Pelaksanaan, di mana lebih banyak langkah berlaku.

Fasa Perlaksanaan

  1. Pembolehubah yang diisytiharkan dalam Fasa Penciptaan dan dimulakan dengan undefined kini diberikan nilai masing-masing.
  2. Fungsi yang diisytiharkan dalam Fasa Penciptaan, yang disimpan sebagai rujukan, kini dipanggil dan dilaksanakan.

Konteks Perlaksanaan Fungsi

Apabila fungsi yang dirujuk semasa Fasa Pelaksanaan Konteks Pelaksanaan Global dipanggil, setiap fungsi mencipta Konteks Pelaksanaan Fungsinya sendiri. Sama seperti Konteks Pelaksanaan Global, Konteks Pelaksanaan Fungsi juga melalui Fasa Penciptaan, di mana beberapa langkah berlaku:

Fasa Penciptaan

  1. Objek parameter dicipta untuk fungsi tersebut.
  2. Objek ini dicipta dan diberikan nilai Objek Global.
  3. Objek Pembolehubah dicipta, di mana semua fungsi dan pembolehubah diisytiharkan. Pembolehubah diperuntukkan tidak ditentukan sebagai nilainya dan fungsi diperuntukkan rujukan kepada fungsi masing-masing.

Setelah Fasa Penciptaan selesai, Konteks Pelaksanaan Fungsi beralih ke Fasa Pelaksanaan, di mana lebih banyak langkah berlaku.

Fasa Perlaksanaan

  1. Pembolehubah yang diisytiharkan dalam Fasa Penciptaan, yang dimulakan dengan undefined, kini diberikan nilai masing-masing.
  2. Fungsi yang diisytiharkan dalam Fasa Penciptaan kini dipanggil dan dilaksanakan.

Konteks Pelaksanaan Fungsi dalam Fungsi Bersarang

Apabila fungsi dipanggil dalam fungsi lain, Konteks Pelaksanaan Fungsi baharu dicipta untuk setiap fungsi ini. Setiap Konteks Pelaksanaan Fungsi kemudiannya melalui kedua-dua Fasa Penciptaan dan Fasa Pelaksanaan. Proses ini berterusan untuk setiap fungsi yang dipanggil dalam fungsi lain dan setiap fungsi akan melalui fasa ini secara berasingan.

Jom lihat rajah di bawah.

JavaScript Execution Context – How JS Code Runs Behind the Scenes

Kami telah melihat bahawa Konteks Pelaksanaan Global dan Konteks Pelaksanaan Fungsi melalui langkah-langkah tertentu. Satu-satunya perbezaan ialah, dalam Konteks Pelaksanaan Global, langkah pertama ialah mencipta objek global, manakala, dalam Konteks Pelaksanaan Fungsi, langkah pertama ialah mencipta objek parameter untuk fungsi tersebut.

Kini, persoalan timbul: bagaimanakah JavaScript mengurus Konteks Pelaksanaan ini apabila ia dicipta untuk konteks global dan setiap fungsi?

Menguruskan Konteks Pelaksanaan dengan Timbunan Pelaksanaan

Untuk mengurus konteks ini, JavaScript menggunakan struktur data yang dipanggil Timbunan Pelaksanaan. Timbunan Pelaksanaan menyimpan konteks dalam cara seperti tindanan: pertama, Konteks Pelaksanaan Global, diikuti oleh setiap Konteks Pelaksanaan Fungsi. Apabila semua konteks pelaksanaan disimpan dalam tindanan, JavaScript memprosesnya satu demi satu, bermula dari bahagian atas tindanan.

Skop dengan let dan const

Adalah penting untuk ambil perhatian bahawa apabila kami mengisytiharkan pembolehubah dengan let atau const di dalam skop global atau fungsi, pembolehubah ini tidak disimpan dalam Objek Pembolehubah semasa Fasa Penciptaan, dan ia tidak dimulakan dengan tidak ditentukan. Sebaliknya, pembolehubah ini diisytiharkan secara langsung dan diberikan nilainya dalam Fasa Pelaksanaan.

Pertimbangkan contoh kod berikut:

Contoh Kod

var a = 1;

function one() {
  console.log(a);

  function two() {
    console.log(b);

    var b = 2;

    function three(c) {
      console.log(a + b + c);
    }

    three(4);
  }

  two();
}

one();

Jika kami menjalankan kod ini, kami akan menghadapi ReferenceError. Ini kerana kami cuba mencetak nilai pembolehubah b sebelum mengisytiharkannya, dan kerana b diisytiharkan menggunakan const, ia berkelakuan berbeza daripada pembolehubah biasa. Pembolehubah yang diisytiharkan dengan const atau biarkan tidak disimpan dalam Objek Pembolehubah semasa Fasa Penciptaan, itulah sebabnya kami mendapat ralat semasa cuba mengaksesnya sebelum ia diberikan nilai.

Kesimpulan

Saya harap penjelasan tentang cara JavaScript berfungsi dan perkara yang berlaku semasa fasa Konteks Pelaksanaannya telah memberikan anda pemahaman yang lebih jelas. Dalam pelajaran seterusnya, kita akan meneroka topik JavaScript yang lain.

Anda boleh berhubung dengan saya di GitHub dan Linkedin.

Atas ialah kandungan terperinci Konteks Perlaksanaan JavaScript – Cara Kod JS Berjalan Di Belakang Tabir. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Python vs JavaScript: Bahasa mana yang harus anda pelajari?Python vs JavaScript: Bahasa mana yang harus anda pelajari?May 03, 2025 am 12:10 AM

Memilih Python atau JavaScript harus berdasarkan perkembangan kerjaya, keluk pembelajaran dan ekosistem: 1) Pembangunan Kerjaya: Python sesuai untuk sains data dan pembangunan back-end, sementara JavaScript sesuai untuk pembangunan depan dan penuh. 2) Kurva Pembelajaran: Sintaks Python adalah ringkas dan sesuai untuk pemula; Sintaks JavaScript adalah fleksibel. 3) Ekosistem: Python mempunyai perpustakaan pengkomputeran saintifik yang kaya, dan JavaScript mempunyai rangka kerja front-end yang kuat.

Rangka Kerja JavaScript: Menguasai Pembangunan Web ModenRangka Kerja JavaScript: Menguasai Pembangunan Web ModenMay 02, 2025 am 12:04 AM

Kuasa rangka kerja JavaScript terletak pada pembangunan yang memudahkan, meningkatkan pengalaman pengguna dan prestasi aplikasi. Apabila memilih rangka kerja, pertimbangkan: 1.

Hubungan antara JavaScript, C, dan penyemak imbasHubungan antara JavaScript, C, dan penyemak imbasMay 01, 2025 am 12:06 AM

Pengenalan Saya tahu anda mungkin merasa pelik, apa sebenarnya yang perlu dilakukan oleh JavaScript, C dan penyemak imbas? Mereka seolah -olah tidak berkaitan, tetapi sebenarnya, mereka memainkan peranan yang sangat penting dalam pembangunan web moden. Hari ini kita akan membincangkan hubungan rapat antara ketiga -tiga ini. Melalui artikel ini, anda akan mempelajari bagaimana JavaScript berjalan dalam penyemak imbas, peranan C dalam enjin pelayar, dan bagaimana mereka bekerjasama untuk memacu rendering dan interaksi laman web. Kita semua tahu hubungan antara JavaScript dan penyemak imbas. JavaScript adalah bahasa utama pembangunan front-end. Ia berjalan secara langsung di penyemak imbas, menjadikan laman web jelas dan menarik. Adakah anda pernah tertanya -tanya mengapa Javascr

Aliran node.js dengan typescriptAliran node.js dengan typescriptApr 30, 2025 am 08:22 AM

Node.js cemerlang pada I/O yang cekap, sebahagian besarnya terima kasih kepada aliran. Aliran memproses data secara berperingkat, mengelakkan beban memori-ideal untuk fail besar, tugas rangkaian, dan aplikasi masa nyata. Menggabungkan sungai dengan keselamatan jenis typescript mencipta powe

Python vs JavaScript: Pertimbangan Prestasi dan KecekapanPython vs JavaScript: Pertimbangan Prestasi dan KecekapanApr 30, 2025 am 12:08 AM

Perbezaan prestasi dan kecekapan antara Python dan JavaScript terutamanya dicerminkan dalam: 1) sebagai bahasa yang ditafsirkan, Python berjalan perlahan tetapi mempunyai kecekapan pembangunan yang tinggi dan sesuai untuk pembangunan prototaip pesat; 2) JavaScript adalah terhad kepada benang tunggal dalam penyemak imbas, tetapi I/O multi-threading dan asynchronous boleh digunakan untuk meningkatkan prestasi dalam node.js, dan kedua-duanya mempunyai kelebihan dalam projek sebenar.

Asal JavaScript: Meneroka Bahasa PelaksanaannyaAsal JavaScript: Meneroka Bahasa PelaksanaannyaApr 29, 2025 am 12:51 AM

JavaScript berasal pada tahun 1995 dan dicipta oleh Brandon Ike, dan menyedari bahasa itu menjadi C. 1.C Language menyediakan keupayaan pengaturcaraan prestasi tinggi dan sistem untuk JavaScript. 2. Pengurusan memori JavaScript dan pengoptimuman prestasi bergantung pada bahasa C. 3. Ciri lintas platform bahasa C membantu JavaScript berjalan dengan cekap pada sistem operasi yang berbeza.

Di sebalik tabir: Apa bahasa JavaScript?Di sebalik tabir: Apa bahasa JavaScript?Apr 28, 2025 am 12:01 AM

JavaScript berjalan dalam penyemak imbas dan persekitaran Node.js dan bergantung pada enjin JavaScript untuk menghuraikan dan melaksanakan kod. 1) menjana pokok sintaks abstrak (AST) di peringkat parsing; 2) menukar AST ke bytecode atau kod mesin dalam peringkat penyusunan; 3) Laksanakan kod yang disusun dalam peringkat pelaksanaan.

Masa Depan Python dan JavaScript: Trend dan RamalanMasa Depan Python dan JavaScript: Trend dan RamalanApr 27, 2025 am 12:21 AM

Trend masa depan Python dan JavaScript termasuk: 1. Kedua -duanya akan terus mengembangkan senario aplikasi dalam bidang masing -masing dan membuat lebih banyak penemuan dalam prestasi.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa