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

Reading a variable value inside a named function in javascript

本文关键字:函数 变量值 javascript 读取      更新时间:2024-02-10

这可能很简单,但我在寻找答案时迷路了,

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

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

如果变量绑定到viewObject作用域,那么访问它会很容易。但在这种情况下不是这样,请有人帮助我从测试套件中获取视图对象中命名函数内的变量。

我想我理解您的困惑,因为当您在window范围中使用var定义变量时,它将成为window对象上的属性。。。这似乎意味着,当您在子作用域中定义变量时,它应该成为本地上下文的成员,对吧?没有。全局参数是特殊的;-)

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

如果您希望sign是公共的,请明确。

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();

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

这样做的一种方法是:

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