Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah Penyata Tangguh Golang Menangkap Pembolehubah dalam Gelung?
Tangkapan Penutupan dalam Penyata Penangguhan Golang
Pernyataan penangguhan Golang membolehkan tindakan pembersihan dilaksanakan selepas fungsi kembali. Walau bagaimanapun, tidak seperti kebanyakan bahasa, penutupan yang dibuat oleh penangguhan tidak menangkap keadaan semasa pembolehubah dalam fungsi sekeliling, sebaliknya menilai mereka apabila penyataan penangguhan dilaksanakan.
Memahami Bahagian 2 lwn Bahagian. 3
Dalam kod yang diberikan, perbezaan antara Bahagian 2 dan Bahagian 3 terletak pada cara penutupan menangkap pembolehubah i.
Bahagian 2:
for i := range whatever { defer func() { fmt.Println(i) }() }
Dalam Bahagian 2, penutupan menangkap pembolehubah i secara langsung. Apabila kod dalam penutupan dilaksanakan (selepas gelung selesai), nilai i ditentukan oleh lelaran akhir gelung, iaitu 4. Inilah sebabnya Bahagian 2 mengeluarkan "44444."
Bahagian 3:
for i := range whatever { defer func(n int) { fmt.Println(n) }(i) }
Dalam Bahagian 3, penutupan tidak menangkap i secara langsung, sebaliknya mencipta pembolehubah baru n dan memberikannya nilai i pada masa penyata tangguh dilaksanakan . Oleh kerana pernyataan tangguh dilaksanakan untuk setiap lelaran gelung, setiap penutupan mempunyai nilai yang berbeza untuk n. Ini menghasilkan output "43210."
Key Point:
Konsep utama yang perlu diingat ialah kod dalam penutupan dalam penangguhan tidak dilaksanakan apabila penangguhan kenyataan dilaksanakan. Sebaliknya, ungkapan yang digunakan untuk menentukan hujah penutupan (cth., i dalam kes ini) dinilai apabila pernyataan tangguh dilaksanakan.
Atas ialah kandungan terperinci Bagaimanakah Penyata Tangguh Golang Menangkap Pembolehubah dalam Gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!