Tập lệnh này có hành vi khác nhau dựa trên việc nó có chạy từ vỏ nút js hay được lưu trữ trong tệp tập lệnh được chuyển đến nút hay không.Tại sao các chức năng không có sẵn trong đối tượng toàn cầu?
Script:
var a = 1;
function b(){return 1;}
for(var k in global) console.log(k);
Output trong vỏ (chỉ có 4 dòng cuối cùng có liên quan IMO Mỗi phòng trong số 3 dòng là sao chép/dán liên tục vào một trường hợp nút REPL chạy trong Terminal trên Mac OS X.):
ArrayBuffer
Int8Array
Uint8Array
Int16Array
Uint16Array
Int32Array
Uint32Array
Float32Array
Float64Array
DataView
global
process
GLOBAL
root
Buffer
setTimeout
setInterval
clearTimeout
clearInterval
console
module
require
a
_
b
k
Output khi chạy như một kịch bản lưu (gọi tắt là node myscript.js
từ bash trên Mac OS X):
ArrayBuffer
Int8Array
Uint8Array
Int16Array
Uint16Array
Int32Array
Uint32Array
Float32Array
Float64Array
DataView
global
process
GLOBAL
root
Buffer
setTimeout
setInterval
clearTimeout
clearInterval
console
Tại sao chúng khác nhau và tại sao tập lệnh của tôi không thể xem a
và b
trong global
?
CHỈNH SỬA: Thêm câu lệnh bổ sung c = 2 đã thay đổi đầu ra. c được hiển thị trong cả hai phương thức chạy tập lệnh. Điều này vẫn không giải thích sự hiện diện của a và b khi chạy kịch bản từ trình bao.
Bạn có thể thêm vào thử nghiệm của mình không: 1) Phân bổ biến không có 'var': Vì vậy, chỉ cần thực hiện' c = 3'; 2) 'console.log (this === global)' –
Bạn cũng có thể nêu chi tiết cách bạn chuyển các tệp này sang Node không? (Các dòng lệnh chính xác) –
Xong. Còn gì nữa không? – Trindaz