javascript - Adakah objek ditakrifkan tanpa menggunakan var dalam fungsi js objek tempatan?
typecho2017-06-14 10:53:31
0
4
932
Objek yang tidak ditakrifkan menggunakan var dalam fungsi haruslah objek global Pada halaman P71 Buku Merah Kecil, apabila dikatakan bahawa obj ditulis semula secara dalaman dalam fungsi, rujukan objek ini menjadi objek tempatan tak faham~~
Saya mengeluarkan buku merah kecil saya secara khas Bahagian ini bercakap tentang menghantar parameter mengikut nilai, kemudian objek dihantar mengikut nilai, dan apa yang diluluskan ialah penunjuk ke lokasi objek. Jadi, pada langkah pertama, mudah difahami jika terdapat atribut 'nama' bagi 'chen'. Oleh kerana obj ialah parameter fungsi, maksud sebenar adalah dalam fungsi Apabila var了一个obj,后期,函数执行完,就会被销毁。可能你看了后面的执行环境和作用域好理解一点。然后,obj = new Object() , nilai obj bukan penunjuk objek orang asal. Sudah tentu, jika anda menggantikan baris kedua kod dengan 'obj1', anda akan mendapat kesan daripada pengisytiharan global yang anda nyatakan. (Jawab soalan dengan sangat serius)
Apa yang anda tulis dalam fungsi yang anda takrifkan seperti ini hanyalah parameter formal, bukan parameter sebenar, apatah lagi parameter global dan setempat. . . . . . . . . . . . . .
Setelah membaca jawapan rujukan yang diberikan oleh netizen, saya berfikir sejenak, dan secara kasarnya saya tidak tahu sama ada ia betul atau tidak, tetapi saya rasa saya agak rapat! Parameter semua fungsi dalam ECMAScript dihantar mengikut nilai Jadi apabila objek orang dihantar ke setName() sebagai parameter sebenar, penunjuk objek orang disalin ke setName() Anggap bahawa penunjuk asal kepada orang itu objek adalah nombor satu , penunjuk selepas menyalin adalah nombor dua Dua penunjuk ini menunjuk kepada objek orang pada masa yang sama Jadi apabila obj.name="chen" dilaksanakan dalam fungsi, atribut nama akan ditambahkan pada objek orang mengikut penunjuk nombor dua Tetapi apabila melaksanakan When obj=new Object();, penunjuk kedua akan menunjuk ke objek baharu dan bukannya objek orang asal Jadi apabila obj.name="long"; atribut nama objek orang tidak akan ditukar console .log(person.name); akan mengembalikan "chen" dan obj ialah parameter formal, bukan parameter sebenar dimusnahkan selepas fungsi itu dilaksanakan, iaitu, tiada lagi penunjuk nombor dua. Tiada penunjuk kepada atribut nama "panjang".
Saya mengeluarkan buku merah kecil saya secara khas Bahagian ini bercakap tentang menghantar parameter mengikut nilai, kemudian objek dihantar mengikut nilai, dan apa yang diluluskan ialah penunjuk ke lokasi objek. Jadi, pada langkah pertama, mudah difahami jika terdapat atribut 'nama' bagi 'chen'.
Oleh kerana obj ialah parameter fungsi, maksud sebenar adalah dalam fungsi Apabila
var
了一个obj
,后期,函数执行完,就会被销毁。可能你看了后面的执行环境和作用域好理解一点。然后,obj = new Object()
, nilai obj bukan penunjuk objek orang asal.Sudah tentu, jika anda menggantikan baris kedua kod dengan 'obj1', anda akan mendapat kesan daripada pengisytiharan global yang anda nyatakan. (Jawab soalan dengan sangat serius)
Apa yang anda tulis dalam fungsi yang anda takrifkan seperti ini hanyalah parameter formal, bukan parameter sebenar, apatah lagi parameter global dan setempat. . . . . . . . . . . . . .
obj ialah parameter
Setelah membaca jawapan rujukan yang diberikan oleh netizen, saya berfikir sejenak, dan secara kasarnya saya tidak tahu sama ada ia betul atau tidak, tetapi saya rasa saya agak rapat!
Parameter semua fungsi dalam ECMAScript dihantar mengikut nilai
Jadi apabila objek orang dihantar ke setName() sebagai parameter sebenar, penunjuk objek orang disalin ke setName()
Anggap bahawa penunjuk asal kepada orang itu objek adalah nombor satu , penunjuk selepas menyalin adalah nombor dua
Dua penunjuk ini menunjuk kepada objek orang pada masa yang sama
Jadi apabila obj.name="chen" dilaksanakan dalam fungsi, atribut nama akan ditambahkan pada objek orang mengikut penunjuk nombor dua
Tetapi apabila melaksanakan When obj=new Object();, penunjuk kedua akan menunjuk ke objek baharu dan bukannya objek orang asal
Jadi apabila obj.name="long"; atribut nama objek orang tidak akan ditukar
console .log(person.name); akan mengembalikan "chen"
dan obj ialah parameter formal, bukan parameter sebenar dimusnahkan selepas fungsi itu dilaksanakan, iaitu, tiada lagi penunjuk nombor dua. Tiada penunjuk kepada atribut nama "panjang".