【问题标题】:Javascript: Calling a method stored in a variableJavascript:调用存储在变量中的方法
【发布时间】:2010-11-22 19:26:33
【问题描述】:

我试图通过在一个上下文中创建一个方法并将其存储在一个全局变量中来利用 Javascript 闭包,以便以后可以从另一个上下文中调用它。

//Global variable to hold the function
var revertEvent;

//creates the function and assigns it to the global variable
 function createRevertFunction(eventToBeReverted) {

            revertEvent = function () {
                alert("Now Restoring Event");
                $('#calendar').fullCalendar('renderEvent', eventToBeReverted, true);
            }          
  }

因此,“createRevertFunction”保存了原始对象的状态。该对象“eventToBeReverted”在调用此函数后会被修改,因此这提供了一种无需刷新页面即可将原始 UI 恢复到 UI 的方法。

我的问题是我似乎无法调用变量“revertEvent”中的函数。

我试过了:

revertEvent();
revertEvent.call();
window[revertEvent]();

它们都不起作用。任何帮助将不胜感激...!

【问题讨论】:

    标签: javascript closures


    【解决方案1】:

    我认为这里最有可能的问题是您在通过createRevertFunction 设置之前尝试调用revertEvent。为了验证这一点,revertEvent 的声明如下

    var revertEvent = function() { alert('not set yet'); }
    

    如果在createRevertFunction之前调用,这将弹出“尚未看到”警报

    【讨论】:

    • 我也认为这是他的问题。 @cinqoTimo 何时在您的代码中尝试调用 revertEvent 函数以及何时调用 createRevertFunction?
    【解决方案2】:

    make createRevertFunction 返回内部函数。分配。

    var revertEvent;
    
    //returns the function so we can do whatever with it
     function createRevertFunction(eventToBeReverted) {
    
            return function () {
                alert("Now Restoring Event");
                $('#calendar').fullCalendar('renderEvent', eventToBeReverted, true);
            }          
      }
    
    
    revertEvent = createRevertFunction(e);
    

    【讨论】:

      【解决方案3】:
      >>> var revertEvent; 
      undefined
      >>> (function() {   revertEvent = function() { alert('hi') }   })();
      undefined
      >>> revertEvent()
      

      这对我有用。向我们展示您对该功能的使用情况,createRevertFunction...

      【讨论】:

        【解决方案4】:

        revertEvent 仅在您的函数内部定义,之后会被遗忘。您必须将其保存到全局变量(在函数外部定义),或者返回创建的函数并存储它。

        【讨论】:

        • revertEvent 未在函数中定义,应具有全局范围。
        • revertEvent 在本例中不是局部范围变量。
        • 大声抱歉,你们是对的人,没有读得足够好。那么奇怪..找到答案后会编辑
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-24
        • 2016-08-27
        • 1970-01-01
        相关资源
        最近更新 更多