Mengapa Pengangkatan Pembolehubah selepas Pemulangan Berkelakuan Berbeza dalam Penyemak Imbas
Mekanisme pengangkat JavaScript, yang menggerakkan pengisytiharan pembolehubah ke bahagian atas skopnya, berinteraksi tanpa diduga dengan penyataan kembali dalam pelayar yang berbeza. Pertimbangkan kod berikut:
<code class="javascript">alert(myVar1); return false; var myVar1;</code>
Kod ini mengakibatkan ralat dalam Internet Explorer, Firefox dan Opera, yang menunjukkan pernyataan pemulangan tidak sah di luar fungsi. Walau bagaimanapun, dalam Safari dan Chrome, kod tersebut dilaksanakan tanpa ralat dan memaparkan "undefined" untuk myVar1.
Menjelaskan Gelagat
JavaScript mengangkat pembolehubah ke bahagian atasnya skop, tanpa mengira penempatannya dalam kod. Dalam contoh di atas, jurubahasa mengangkat myVar1 ke permulaan skop global:
<code class="javascript">var myVar1; alert(myVar1); return false;</code>
Pernyataan pulangan kemudiannya cuba mengembalikan palsu, tetapi gagal kerana ia berada di luar fungsi. Dalam IE, FF dan Opera, ini mengakibatkan ralat.
Safari dan Gelagat Chrome
Safari dan Chrome mengendalikan penyata angkat dan pemulangan secara berbeza. Penyusun JIT (Just-in-time) mereka melakukan analisis statik sebelum pelaksanaan. Dalam kes ini, JIT mengenal pasti pernyataan pulangan yang tidak sah dan mengabaikannya, membenarkan kod untuk melaksanakan dan memaparkan "tidak ditentukan" untuk myVar1.
Amalan Terbaik
Untuk mengelakkan kemungkinan ralat yang berkaitan dengan pengangkatan, adalah amalan terbaik untuk mengisytiharkan pembolehubah di bahagian atas skopnya, sebelum sebarang kod lain. Ini menghalang pengangkatan daripada memindahkan pembolehubah secara tidak dijangka atau membawa kepada tingkah laku yang tidak dijangka.
Atas ialah kandungan terperinci Mengapakah Pengangkatan dengan Penyata Pemulangan Berkelakuan Berbeza dalam Pelayar Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!