【问题标题】:Access Variable from a different function without creating global variables从不同的函数访问变量而不创建全局变量
【发布时间】:2015-07-11 09:52:31
【问题描述】:

我最近开始使用 CasperJS 进行 Web 自动化,有些事情让我有些困惑。

如何从一个函数访问另一个函数的局部变量?例如:

casper.start('http://google.com', function(){
    var someVar = 20;
});

casper.thenOpen('http://google.com/analytics', function(){
    // How can I access someVar?jav
});

我知道someVar 不在第二个函数的范围内,但是如何在不定义全局变量的情况下在第二个函数中访问someVar

【问题讨论】:

    标签: javascript scope global-variables phantomjs casperjs


    【解决方案1】:

    使用对象获取某个变量作为属性怎么样:

    var myObj = {};
    
    casper.start('http://google.com', function(){
        myObj.someVar = 20;
    });
    
    casper.thenOpen('http://google.com/analytics', function(){
        console.log(myObj.someVar);
    });
    

    【讨论】:

      【解决方案2】:

      不使用你所说的全局变量,然后创建第三个函数(bean),该函数将具有 var someVar = 20; 局部变量并提供 gettersetter 函数供其他人使用。

      var SharedSpace = (function(){
       var shared = 20; //initialization
       return {
         getShared: function(){
                            return shared;
                         },
         setShared: function(val){
                            shared = val;
                         }
         }
      })();
      
      (function(){
          alert(SharedSpace.getShared());
          SharedSpace.setShared(500)
      })();
      
      (function(){
          alert(SharedSpace.getShared());
          SharedSpace.setShared(400)
      })();
      
      (function(){
          alert(SharedSpace.getShared());
          SharedSpace.setShared(10)
      })();

      【讨论】:

      • 并将所有代码放在匿名函数中以创建本地范围,因此变量不会在全局范围内。
      • 啊,这是一个很好的例子。谢谢!
      【解决方案3】:

      您不能这样做以使其干净且有意义。定义一个全局变量是唯一干净的方法。您当然可以将变量放在 casper 对象上,但这并不干净,因为如果您使用错误的变量名,它可能会干扰 CasperJS 功能。我只在为casper 定义辅助函数时才这样做。

      casper.start('http://google.com', function(){
          this.someVar = 20;
      });
      
      casper.thenOpen('http://google.com/analytics', function(){
          this.echo(this.someVar);
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多