在函数内定义的函数如何调用

10

*有没有办法在JavaScript中调用在另一个函数内定义的函数?例如:

window.onload() = function() {
    function my_function(){
        print("Blah");
    };
};

function function_two(){
    my_function();
};
有没有办法做到像上面那样(即在 function_two 中调用 my_function,尽管它是在 window.onload() 函数内定义的)? 在我的实际代码中,还使用了raphael.js库,我正在尝试编写一个HTML按钮,该按钮使用onClick函数调用一个函数(例如function_two),该函数运行在window.onload()中定义的函数(例如my_function)。但是控制台显示my_function未定义。
3个回答

12

正如Zeychin和Trevor所说,函数的作用域是这里的核心问题。我想提供另一种处理方式。基本上,你可以将函数设置为一个在更高作用域中的变量(也就是可被onload和function_two函数访问),同时像你最初定义时那样在onload函数内部定义:

var myFunction; //This is the placeholder which sets the scope

window.onload() = function() {
   myFunction = function() { //Assign the function to the myFunction variable
      print('blah');
   }
}

function function_two() {
   myFunction();
}
这可能很有用,如果你只在 onload 事件中获取 myFunction 所需的信息。

我无法使这个例子运行起来。它显示了一个错误信息:“JavaScript错误:未捕获的类型错误:对象[object Object]的属性'myFunction'不是一个函数。” - Rodrigo De Almeida Siqueira
Rodrigo - 这个错误表明你正在将 'myFunction' 作为另一个对象的属性/方法进行调用。你能否提出另一个问题或将代码发布为 JSfiddle? - Ben Hull
此外,Rodrigo,在这种情况下对答案进行投票不是downvotes的正确使用方式……特别是如果你想获得针对你具体问题的帮助。看一下这个(以及其他类似的):http://meta.stackexchange.com/questions/2451/why-do-you-cast-downvotes-on-answers - Ben Hull
代码在这里:http://jsfiddle.net/zEAWk/ 它显示“未捕获的引用错误:赋值中的无效左侧”,可能是因为在“window.onload”后面加上了“()”。我还尝试将“print('blah')”更改为“alert('blah')”,但仍无法运行。 - Rodrigo De Almeida Siqueira

3
window.onload = function() {
    my_function()
};

function my_function(){
    alert("Blah");
};

function function_two(){
    my_function();
};

3
您无法执行您所要求的操作。 函数my_function()的范围仅限于匿名函数function()内部。当该方法未执行时,它会失去作用域,因此这是不可能的。 Trevor的回答是实现这一操作的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接