Artikel ini membawakan anda pengetahuan yang berkaitan tentang pra-penyusunan dalam javascript Ia terutamanya memperkenalkan isu-isu berkaitan pra-penyusunan melalui contoh.
Bab ini terutamanya bercakap tentangPra-penyusunan Proses
Pra-penyusunan juga dibahagikan kepada 2 titik dalam masa:
Tetapi sebelum kod JavaScript, prapenyusunan sebelumnya hanya berlaku sekali dan prapenyusunan sebelum pelaksanaan fungsi adalah beberapa kali.
window
objek atau Untuk objek GO (Global Object
), kita tidak dapat melihat (tidak dapat mencetak) var
yang diisytiharkan oleh let
dan diletakkan dalam objek GO dan diberikan nilai undefined
(mengingati "promosi pembolehubah") <script> var a = 1; console.log(a); console.log(b); var b = 10; function fun (a) { console.log(b); var a = b = 2; var c = 123; console.log(a); console.log(b); } var a2 = 20 fun(1); </script>
Digabungkan dengan langkah-langkah yang disebutkan di atas:
Pertama sekali, GO akan dibuat sebelum kod dalam <script></script>
dilaksanakan Objek (objek tetingkap)
GO = { //自带的属性都不写 }
meletakkan semua pembolehubah global yang diisytiharkan dan pembolehubah tidak diisytiharkan menggunakan var
dan let
ke dalam objek GO, dan memberikan nilai kepada undefined
GO = { a : undefined, b : undefined, a2 : undefined }
AnalisisPengisytiharan fungsi, nama fungsinya ialah nama atribut dan nilainya ialah badan fungsi Jika nama fungsi dan nama pembolehubah adalah sama, ia akan ditimpa dengan kejam
GO = { a : undefined, b : undefined, a2 : undefined, function fun (a) { var a = b = 2; var c = 123; } }
Pada masa ini, pra- proses penyusunan sebelum pelaksanaan kod js selesai, dan pelaksanaan kod js bermula, a diberikan nilai 1, yang juga dalam objek GO akan dibuat :
GO = { a : 1, b : undefined, a2 : undefined, function fun (a) { var a = b = 2; var c = 123; } }
dan kemudian a akan dicetak Pada masa ini, pembolehubah a akan ditemui pada objek GO, dan nilai a pada masa ini ialah 1, jadi console.log(a)
bersamaan dengan 1. Kemudian cetak b, dan juga cari pada objek GO Nilai b didapati undefined
, jadi console.log(b) adalah sama dengan undefined
.
Kemudian laksanakan pernyataan tugasan: b = 10;
Pada masa ini, nilai b dalam objek GO menjadi 10
GO = { a : 1, b : 10, a2 : undefined, function fun (a) { var a = b = 2; var c = 123; } }
Barisan kod seterusnya ialah fungsi **fun
, yang tidak akan dilaksanakan pada masa ini**, kerana ia sebenarnya diletakkan di hujung hadapan kod semasa pra sebelumnya -proses kompilasi Ini adalah pernyataan legenda terlebih dahulu, jadi saya mengabaikannya. Kemudian lakukan operasi penugasan : kepada a2 = 20
a2, dan objek GO juga berubah:
GO = { a : 1, b : 10, a2 : 20, function fun (a) { var a = b = 2; var c = 123; } }
Kemudian fungsi fun
dilaksanakan, sebagai disebutkan di atas Pra-penyusunan berlaku pada masa yang lain, iaitu sebelum melaksanakan fungsi Sekarang mari kita bercakap tentang pra-penyusunan sebelum pelaksanaan fungsi.
Panggilan fungsi juga akan menjana skopnya sendiri (**AO: **Objek Pengaktifan, konteks pelaksanaan)AO objek aktif. Apabila fungsi dipanggil, ia dijana seketika sebelum pelaksanaan Jika terdapat berbilang panggilan fungsi, berbilang AO
undefined
Laksanakan baris demi baris.
Langkah pertama ialah mencipta objek AO
Cari
parameter formalAO{ }
; Nota: b dalam fungsi tidak diisytiharkan oleh var, jadi ia adalah global berubah-ubah dan tidak akan diletakkan dalam undefined
pada AO.
parameter sebenarTetapkan
fun
fun
AO{ a: undefined,//形参a与局部变量a同名 c: undefined }
Cari pengisytiharan fungsi dan masukkannya ke dalam objek AO dan tetapkan ia sebagai badan fungsi Fungsi keseronokan tidak mempunyai pengisytiharan fungsi, jadi abaikan langkah ini.
函数执行之前的预编译完成,开始执行语句
执行代码
首先执行打印变量b,而此时fun
的AO里边并没有变量b,所以会去GO对象里边找,此时的GO对象b的值为10,所以第一行代码打印出10;
第二行代码首先要看的是b = 2
,然后GO对象里边b的值就被改为2了。
GO = { a : 1, b : 10, a2 : 20, function fun (a) { var a = b = 2; var c = 123; } }
然后b再赋值给a,变量a是属于局部变量a,所以fun
的AO对象里边a的值被改为2。
AO{ a: 2, c: undefined, }
接着下一个赋值语句是c = 123
,所以AO对象中c的值被改为了123
AO{ a: 2, c: 123, }
此时再执行console.log(a)
的值就是AO对象里边a的值 2;执行console.log(b)
的值就是GO对象b的值 2,至此函数fun执行完毕,紧跟着fun的AO也会被销毁。
综上所述,依次打印出来的值为:1,undefined,10,2,2
。
undefined
)imply global(暗示全局变量-专业术语)
即:任何变量,如果未经声明就赋值,则此变量就位全局变量所有。(全局域就是window
,这里再一次说明了JavaScript是基于对象的语言,base on window
)window
的属性;var a=12;
等同于window.a = 12;
(会造成window
这个对象特别臃肿)相关推荐:javascript学习教程、web前端开发视频教程
Atas ialah kandungan terperinci Kuasai sepenuhnya proses prapenyusun JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!