【问题标题】:Passing a variable to a self invoking function将变量传递给自调用函数
【发布时间】:2016-10-23 04:36:48
【问题描述】:

我有一个 AJAX 请求,并且在成功处理程序中,能够在我将数据传递给名为 dataHandler 的函数的任何位置获取数据。从那里我处理我需要的东西并最终得到一系列项目。

function dataHandler() {
    var myArray = ["21/06/2016"];
}

我正在尝试将 dataHandler() 函数中的内容传递给另一个自调用函数,但如果我将函数命名为 $(function myName(){},那么在我的第一个函数中,myName(myArray); 我仍然可以t 访问数据。

$(function() {
    console.log(myArray);
})

如何将变量从普通函数传递到自调用函数?

【问题讨论】:

  • 使其全球化,并获得访问权
  • 你可能真的想调用这个函数:(function() { /.../ })()?这与 jQuery 无关,只需创建一个函数,将其包装在括号中并使用标准函数调用来调用它。此外,值myArray 不存在)范围之外。
  • 您的代码中没有任何 IIFE。您正在立即调用 $() 并将函数作为参数传递给它。
  • 我如何让它全球化?创建一个全局变量,然后将我的数组推送到第一个函数中的全局变量,然后从第二个函数中获取它?虽然它不同步,所以它可能并不总是有效?
  • 调用dataHandler 返回该数组,但返回的数组需要存储或传递给某些东西,否则它会消失在空白中,因为变量myArray只存在在函数内部,而不是在函数外部。所以console.log(dataHandler()); 会记录你想要的,还有var a = dataHandler(); console.log(a);,但不是dataHandler() console.log(myArray),因为myArrayundefined

标签: javascript jquery


【解决方案1】:

您的代码中没有任何IIFE,并且您要传递的变量是locally scoped 到声明它的函数。

听起来你实际上需要这样的东西:

function dataHandler() {
    var myArray = ["21/06/2016"];

    $(function() {
        console.log(myArray);
    });
}

dataHandler();

地点:

  • dataHandler 实际被调用(因此变量被赋值)
  • $()dataHandler 内部被调用,这样当匿名函数被传递给它时,myArray 就在作用域内

【讨论】:

  • 虽然里面的函数其实并没有什么作用是吗?你可以用console.log(myArray) 替换$(fu...),你会达到同样的效果,对吧?除此之外,我知道。
  • @somethinghere — 它会延迟它的执行,直到 ready 事件触发。这对于 console.log 来说并不重要,但对于涉及 DOM 的任何事情都是如此。
  • @somethinghere 好奇的头脑也可以帮助他们周围的每个人学习,保持学习 - 以 I learned something new 为例,与问题无关。
【解决方案2】:

将函数作为参数传递给自调用函数,如下所示:

function dataHandler() {
    var myArray = ["21/06/2016"];
    return myArray;
}

(function(yourArray) {
    console.log(yourArray);
})(dataHandler());

【讨论】:

    【解决方案3】:

    通常模块模式是使用自调用函数实现的。在模块模式中,我们保留对函数返回对象的引用。在这种情况下,我们将返回值视为模块的公共 API:

    var module = (function (param) {
      // private
      return {
        // public
      };
    }(param));
    

    【讨论】:

      猜你喜欢
      • 2013-10-17
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多