Apa 'global' objek di NodeJS
I've hanya melihat perilaku aneh dari ini
kata kunci di NodeJS lingkungan. I'm listing mereka dengan kode. I've menjalankan kode ini dengan NodeJS v6.x
, dengan single JavaScript
file.
Sementara pengujian dengan satu baris kode sebagai berikut, apakah dengan atau tanpa 'penggunaan ketat'
pernyataan ini menunjuk ke objek kosong {}
.
console.log(this)
Tapi, ketika saya'm menjalankan pernyataan dalam melaksanakan fungsi seperti,
(function(){
console.log(this);
}());
It's percetakan yang benar-benar besar objek. Menurut saya Global eksekusi konteks objek yang dibuat oleh NodeJS
lingkungan.
Dan saat menjalankan fungsi di atas dengan 'penggunaan ketat'
pernyataan, diharapkan it's printing undefined
(function(){
'use strict';
console.log(this);
}());
Tapi, saat bekerja dengan browser (saya've diuji hanya dengan Chrome
), tiga contoh hasil jendela
objek dan yang terakhir memberi undefined
seperti yang diharapkan.
Perilaku dari browser ini cukup dimengerti. Tapi, dalam kasus Indonesia
, apakah itu tidak membuat konteks eksekusi, sampai aku'm pembungkus di dalam fungsi?
Jadi, sebagian besar dari kode di Indonesia
berjalan dengan kosong global objek
?
Sementara di browser lingkup global adalah
jendela
objek, di nodeJS global lingkup modul modul itu sendiri, sehingga ketika anda mendefinisikan variabel dalam lingkup global dari nodeJS modul, ini akan menjadi lokal untuk modul ini.Anda dapat membaca lebih lanjut tentang hal itu di NodeJS dokumentasi di mana ia mengatakan:
Dan dalam kode anda ketika anda menulis:
konsol.log(ini)
kosong js file(modul) akan mencetak objek kosong{}
mengacu anda kosong modul.konsol.log(ini);
di dalam diri menjalankan fungsi,ini
akan mengarah ke global nodeJS lingkup objek yang berisi semua NodeJS sifat-sifat umum dan metode sepertirequire()
,modul
,ekspor
,console
...konsol.log(ini)
dengan strict mode di dalam diri memanggil fungsi ini akan mencetakundefined
sebagai self dipanggil fungsi doesn't memiliki default lokal lingkup objek di Strict mode.Nilai
ini
di node modul:ini
di NodeJS lingkup global adalah modul saat ini.ekspor objek, bukan objek global. Hal ini berbeda dari browser mana lingkup global adalah globaljendela
objek. Pertimbangkan hal berikut kode yang dijalankan di Node:Pertama kita log emty objek karena tidak ada nilai di
modul.ekspor
dalam modul ini. Kemudian kita menempatkanfoo
padamodul.ekspor
objek, ketika kita kemudian lagi logini
kita dapat melihat bahwa sekarang log diperbaruimodul.ekspor
objek.Bagaimana kita dapat mengakses
global
objek:Kita dapat mengakses
global
objek di node menggunakanglobal
kata kunci:The
global
objek memperlihatkan berbagai sifat yang berguna tentang lingkungan. Juga ini adalah tempat di mana fungsi sebagaisetImmediate
danclearTimeout
berada.Sangat menarik:
akan menghasilkan:
Di
3)
ini ini tidak terdefinisi karena tidak autoboxed ke objek ketat mode. Itu berarti bahwa tidak ada akar objek dalam konteks ini. Jika anda tidak menggunakan modus yang ketat maka kode anda kemas oleh orang tua lingkup.Seperti yang anda lihat pada output, dalam nodejs ada banyak informasi tentang node hal-hal internal.Di
1)
output adalah objek kosong karena di tingkat atas kode di node modul, ini adalah setara dengan modul.ekspor dan modul.ekspor kosong dalam contoh ini.Untuk mulai dengan dokumentasi pada konteks Global di node lingkungan
Masing-masing JS file diperlakukan sebagai suatu modul. Node secara otomatis membungkus kode JS file dalam diri HIDUP dengan
ekspor, membutuhkan, modul, __nama __dirname
sebagai parameter ke fungsi.Di bawah ini adalah screenshot dari konteks eksekusi menggunakan
node-debug
Jika anda menjalankan kode di bawah ini, cetakan
benar
yang berartiini
menunjuk padaekspor
di node.js. Terbaik dijelaskan dalam jawaban.Yang berarti pada pelaksanaan kode dibungkus sesuatu yang mirip seperti di bawah ini Node.js memisahkan kode dari konteks global dengan menggunakan wrapper konteks fungsi.
Jawaban ke titik berikutnya lihat ini dokumentasi benar-benar:
jadi, ketika anda menjalankan kode ini
cetakan
global
objek dan dalam penggunaan ketatmode cetakan
undefined`Ingat:
Di Browser fungsi ini tidak dibungkus oleh HIDUP/pembungkus fungsi konteks seperti di node, yang langsung dieksekusi pada
jendela
objek. Oleh karena itu konteks panggilan bervariasi untuk Node.js dan Browser.Baca juga ini.