0

我是 JS 的新人,我正在 phonegap 中做一个移动项目,我想知道如何在整个页面范围内保留一个变量,而不是全局变量,因为它会占用大量内存,这对于移动开发人员来说是不可接受的,我有如图所示,一个页面中有两个或多个 JS 标签,

<script type="text/javascript">
// script one here
</script>

<html> //html block here </html>

<script type="text/javascript">
// script two here
</script>

所以我请求您的宝贵建议和帮助。谢谢!

4

1 回答 1

2

“整体页面范围”全局范围。

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 后删除窗口对它的引用,这意味着根本没有全局变量)

*技术上尝试/捕获并引入范围,但它们非常罕见,不应该这样使用

于 2013-06-07T06:35:29.847 回答