Như đã đề cập ở trên, có vấn đề với việc sử dụng phạm vi cao nhất trong tệp tập lệnh của bạn. Đây là một vấn đề khác: Tệp tập lệnh có thể được chạy từ một ngữ cảnh không phải là ngữ cảnh chung trong một số môi trường thời gian chạy.
Nó đã được đề xuất để chỉ định toàn cầu window
trực tiếp. Nhưng điều đó cũng phụ thuộc vào thời gian chạy và không hoạt động trong Node, v.v. Nó cho thấy rằng quản lý biến toàn cục di động cần một số cân nhắc cẩn thận và nỗ lực thêm. Có thể họ sẽ sửa nó trong các phiên bản ECMS trong tương lai!
Hiện tại, tôi muốn giới thiệu một cái gì đó như thế này để hỗ trợ quản lý toàn cầu thích hợp cho tất cả các môi trường thời gian chạy:
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", {});
Việc gõ nhiều hơn một chút, nhưng nó giúp cho việc quản lý biến toàn cầu của bạn trở nên bền vững trong tương lai.
Tuyên bố từ chối trách nhiệm: Một phần của ý tưởng này đến với tôi khi xem các phiên bản trước của stacktrace.js .
Tôi nghĩ, người ta cũng có thể sử dụng Webpack hoặc các công cụ khác để phát hiện môi trường thời gian chạy đáng tin cậy hơn và ít bị hack hơn.