通过返回函数名来执行内部函数

时间:2011-07-27 22:40:07

标签: javascript object literals

我想执行内部函数,但我很难理解为什么它会以未定义的方式返回

object.method2();

var object = {
    method1 : function(){
        return function(){
            innerFunction();
        }
    },

    method2 : function(){
        function innerFunction(){
            alert('I am showing as not defined but I want to be executed')
        }

        executeInnerFunction = object.method1()
        executeInnerFunction();
    }   

}

4 个答案:

答案 0 :(得分:3)

JavaScript具有 lexical 作用域---代码只能看到在其作用域(函数)中声明的变量或语法树中的任何祖先作用域。由于innerFunctionmethod2范围内声明,而method2在语法上不是method1的祖先,因此您无法使用它。

答案 1 :(得分:1)

innerFunction仅在method2中已知,因为它是在method2的范围内声明的。 如果您想从method1获得访问权限,可以在此声明innerFunction: this.innnerFunction = function(){},以便object.innerFunction()可以被调用。

如果您不想将innerFunction公开为对象的公共方法,则可能需要使用闭包:

function doObject(){
 function innerFunction(){alert('yihou');}
 return {
  method1:function(){innerFunction();},
  method2:function(){}
 };
}

答案 2 :(得分:1)

我认为你的任务也不对。这样做:

executeInnerFunction = object.method1;

您希望存储对方法的引用,而不是调用方法一次的结果。

除此之外,看看ngn必须说些什么。

答案 3 :(得分:0)

其他人已回答范围问题,但您也试图致电object.method2() 在它存在之前。

函数声明在代码执行之前被处理,因此您可以在代码的上方调用声明的函数,但是 object.method2 是通过赋值创建的,因此 object 在执行分配代码之前没有 method2 属性,这是在调用之后。