【问题标题】:how to keep a variable in overall page scope - Javascript如何在整个页面范围内保留变量 - Javascript
【发布时间】:2013-06-07 06:31:03
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • overall page scopeglobal variable 在 Javascript 中的意思是一样的吗?
  • 为什么你认为全局变量会消耗额外的内存?
  • @Teemu:它是一个移动应用程序,所以我们应该知道即使是单个全局变量..
  • @mvp 你最后做了什么?我的回答对您的问题有帮助吗?
  • @BenjaminGruenbaum :感谢您的支持,如果您能提供任何关于它的教程,我会很高兴。

标签: javascript mobile cordova phonegap-plugins


【解决方案1】:

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

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

*技术上是 try/catch 并且还引入了作用域,但它们非常罕见,不应该这样使用

【讨论】:

    猜你喜欢
    • 2010-12-31
    • 2011-03-26
    • 2013-09-23
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多