【问题标题】:Calling a function that's defined inside a function调用在函数内部定义的函数
【发布时间】:2011-07-21 23:29:49
【问题描述】:

*有没有办法调用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 是未定义的。

【问题讨论】:

    标签: javascript function


    【解决方案1】:

    正如 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 错误:未捕获的 TypeError:对象 [object Object] 的属性 'myFunction' 不是函数”
    • Rodrigo - 该错误表明您正在调用“myFunction”作为另一个对象的属性/方法。您能再问一个问题或将代码发布为 JSfiddle 吗?
    • 另外,罗德里戈,在这种情况下否决答案并不是投反对票的目的……特别是如果您需要针对特定​​问题的帮助。看看这个(以及其他类似的):meta.stackexchange.com/questions/2451/…
    • 代码在这里:jsfiddle.net/zEAWk 它说“Uncaught ReferenceError: Invalid left-hand side in assignment”,可能是因为“window.onload”后面的“()”。我也尝试将“print('blah') 更改为“alert('blah')”,但仍然无法运行。
    【解决方案2】:

    你不能做你要求做的事。 函数my_function() 的作用域仅在匿名函数function() 内。当方法未执行时,它超出了范围,因此这是不可能的。 Trevor 的回答就是这样做的方法。

    【讨论】:

      【解决方案3】:
      window.onload = function() {
          my_function()
      };
      
      function my_function(){
          alert("Blah");
      };
      
      function function_two(){
          my_function();
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多