0

您好,我有以下问题,我不太确定如何搜索:

function(){
    var sites;

    var controller = {
      list: function(){
        sites = "some value";
      }
    }
  }

所以问题是如何从定义为的顶部访问站点变量

变种网站

编辑:

这是一个更完整的部分。我正在使用 marionette.js。我不想定义附加到模块(下面的代码)变量的变量,但将其保留为模块私有,希望这是有道理的。这是有效的代码:

Admin.module("Site", function(Module, App, Backbone, Marionette, $, _ ) {

  Module.sites = null;

  Module.Controller = {
    list: function (id) {
      Module.sites = App.request("site:entities");
    }
  };
});

我想而不是

模块.sites=null;

去做

变种网站;

这样的事情确实有所作为吗?因为在第一种情况下,我将从外部定义一个可访问的变量,而在第二种情况下,它将是一个私有变量。我对javascript有点新,所以请尽量让它简单。

4

3 回答 3

0

I have found some info on this: sadly what i am trying to do doesn't seem possible.

Can I access a private variable of a Marionette module in a second definition of that module?

So i guess i have to do _variable to make developers know its private.

于 2013-04-01T14:38:05.030 回答
0

如果您正在寻找全局访问,只需先在函数外部声明变量,然后对函数内部的变量进行更改,然后您就可以在需要时获取值。

于 2013-04-01T14:16:16.653 回答
0

免责声明:我没有使用 Marionette 的经验,但是,您所描述的听起来非常可行。

JavaScript 最强大的(在我看来)特性之一是闭包。这意味着从另一个函数中声明的任何函数都可以访问在外部函数中声明的变量。

例如:

var func;
function foo() {
    var answer = 42;
    func = function () {
        // I have access to variable answer from in here.
        return answer++;
    };
}

// By calling foo(), I will assign the function func that has access "answer"
foo();

// Now I can call the func() function and it has access to the "answer"
// variable even though it was in a scope that doesn't exist anymore.
// Outputs:
// 42
// 43
console.log(func());
console.log(func());

这意味着如果您按照您的描述从模块定义函数中声明 var 站点,您应该可以从任何内部匿名函数中访问它。唯一的例外是 Marionette 正在重写您的函数(通过使用Function函数和 toString()),这似乎不太可能但可能。

您的原始示例应该如上所述,我怀疑与您的范围无关的代码还有其他问题。

于 2013-04-01T16:34:21.967 回答