“整体页面范围”是全局范围。
JavaScript 作用域(通常,除了特定的深奥作用域*)有两种工作方式:
由于您不能通过脚本标签共享函数,因此全局是您唯一的选择。
考虑传递消息以共享数据而不是全局。
以下是如何通过消息传递来完成这样的事情:
脚本 0:
window.pubsub = (function(){
var subscribers = [];
return {
subscribe:function(user){
subscribers.push(user);
},
publish:function(message,data){
subscribers.forEach(function(elem){
elem.onMessage(data);
});
}
};
})();
脚本 1:
(function(pubsub){
var someObject = {}; // to share state
//code here
pubsub.subscribe(someObject);
someObject.onMessage = function(){
//whatever you do when you get a message
};
})(window.pubsub);
脚本 2 是相同的,只是它处理消息的方式不同。
这样,您就有了一个全局变量(如果太多,您甚至可以在订阅脚本 2 后删除窗口对它的引用,这意味着根本没有全局变量)
*技术上尝试/捕获并引入范围,但它们非常罕见,不应该这样使用