我想执行内部函数,但我很难理解为什么它会以未定义的方式返回
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();
}
}
答案 0 :(得分:3)
JavaScript具有 lexical 作用域---代码只能看到在其作用域(函数)中声明的变量或语法树中的任何祖先作用域。由于innerFunction
在method2
范围内声明,而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 属性,这是在调用之后。