ตามที่กล่าวไว้ข้างต้นมีปัญหาในการใช้ขอบเขตสูงสุดในไฟล์สคริปต์ของคุณ นี่คือปัญหาอื่น: ไฟล์สคริปต์อาจถูกเรียกใช้จากบริบทที่ไม่ใช่บริบทส่วนกลางในสภาพแวดล้อมรันไทม์บางอย่าง
มีการเสนอให้มอบหมายให้ทั่วโลกwindow
โดยตรง แต่นั่นขึ้นอยู่กับเวลาทำงานและไม่ทำงานในโหนดเป็นต้นแสดงให้เห็นว่าการจัดการตัวแปรส่วนกลางแบบพกพาจำเป็นต้องมีการพิจารณาอย่างรอบคอบและใช้ความพยายามเป็นพิเศษ บางทีพวกเขาอาจจะแก้ไขได้ในเวอร์ชัน ECMS ในอนาคต!
สำหรับตอนนี้ฉันขอแนะนำสิ่งนี้เพื่อสนับสนุนการจัดการทั่วโลกที่เหมาะสมสำหรับสภาพแวดล้อมรันไทม์ทั้งหมด:
var exportGlobal = function(name, object) {
if (typeof(global) !== "undefined") {
global[name] = object;
}
else if (typeof(window) !== "undefined") {
window[name] = object;
}
else {
throw new Error("Unkown run-time environment. Currently only browsers and Node.js are supported.");
}
};
exportGlobal("exportGlobal", exportGlobal);
exportGlobal("someothernamespace", {});
เป็นการพิมพ์ที่มากขึ้นเล็กน้อย แต่ทำให้การจัดการตัวแปรทั่วโลกของคุณเป็นหลักฐานในอนาคต
Disclaimer: ส่วนหนึ่งของความคิดนี้มาให้ฉันเมื่อมองไปที่รุ่นก่อนหน้าของstacktrace.js
ฉันคิดว่าเราสามารถใช้ Webpack หรือเครื่องมืออื่น ๆ เพื่อให้ตรวจจับสภาพแวดล้อมรันไทม์ได้อย่างน่าเชื่อถือและน้อยลง