从变量内的函数访问javascript变量

时间:2013-04-01 14:12:46

标签: javascript scope

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

function(){
    var sites;

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

所以问题是如何从定义为

的顶部访问sites变量
  

var sites

编辑:

这是一个更完整的部分。我正在使用marionette.js。我不想定义附加到Module(下面的代码)变量的变量,但保持它对模块是私有的,希望这是有意义的。以下是有效的代码:

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

  Module.sites = null;

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

我希望而不是

  

Module.sites = NULL;

要做

  

var sites;

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我已经找到了一些关于此的信息:遗憾的是,我想做的事似乎不可能。

  

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

所以我想我必须做_variable以使开发人员知道它的私有。

答案 2 :(得分: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()),这似乎不太可能,但可能。

您的原始示例应如所述,我怀疑代码中存在与您的范围无关的其他错误。