在 javascript 中读取命名函数内的变量值

Reading a variable value inside a named function in javascript

这可能很简单,但我找不到答案,

我在 Backbone 视图中有一个命名函数。我正在尝试为这个命名函数编写单元测试,我可以看到在函数范围内声明了一个变量。此变量的状态会根据某些情况发生变化。

我已经在我的测试套件中实例化了视图对象,当我执行 console.log(viewObject.namedFunction) 时,我看到整个函数都被正确记录了。现在我如何访问 namedFunction 中的变量,我期待像 viewObject.namedFunction.variableName 但它不会工作,当我这样做时,它没有按预期工作。

如果变量绑定到 viewObject 范围,那么访问它会很容易。但是在这种情况下,情况并非如此,有人可以帮助我在测试套件的视图对象中获取命名函数内的变量。

一种方法是这样的:

namedFunction = (function(){
     var theActualFunction = function(){
          //Do something
          //Access variable like: theActualFunction.MyVariable
     };
     theActualFunction.MyVariable = "value";
     return theActualFunction;
}());

我想我理解你的困惑,因为当你在 window 范围内使用 var 定义变量时,它会变成 window 对象上的 属性。 .. 似乎可以得出结论,当您在子作用域中定义一个变量时,它应该成为局部上下文的成员,对吗?没有。全局变量很特殊 ;-)

事实上,如果 情况,就会 没有隐私

如果您希望 sign 成为 public,请明确。

obj = {
    namedFunction : function myself() {
        console.log(myself);
        myself.sign = 23;
    }
};
obj.namedFunction.sign;

这种方法的唯一问题是您现在可以从任何地方为 sign 分配一个新值。解决这个问题的经典和首选方法是为您的私有变量创建一个 getter 函数。

var obj = {
    namedFunction : function myself() {
        var sign = 3;
        myself.getSign = function(){return sign;};
    }
};
obj.namedFunction.getSign();

这绝不是唯一的方法,但我希望它能有所帮助。