【问题标题】:How to pass parameter in function in modular pattern in javascript [duplicate]如何在javascript中以模块化模式在函数中传递参数[重复]
【发布时间】:2015-10-22 06:03:59
【问题描述】:

这是我的 Javascript 函数;

var searchbox=function(){
    var _expandbox=function(count){
    };

    var _events=function(){
        setTimeout(_expandbox,3000);
    }

    var _init=function(){
        _events();
    };

    return {
        init: _init
    };
}();

$(document).ready(function(){
    searchbox.init();
});

这里的问题是,如果我调用 setTimeout(_expandbox(4),3000) 之类的函数,它将不起作用。所以请帮助我如何在函数中添加参数。

【问题讨论】:

  • 这就像谷歌上的第一击,带有框架 "setTimeout not working" -> stackoverflow.com/questions/20890943/…
  • 我不是在谈论为什么 setTimeout 不起作用。我的问题是关于如何在模块化 javascript 模式中在函数中传递参数。
  • 不管你使用什么模式,调用一个函数而不是在setTimeout中引用它是你的问题,它是其他几个问题的重复,下面的答案是一样的作为那些重复。
  • 让我们看一个更简单的例子:foo(bar())。这将首先调用bar并将其返回值传递给foo。这就是几乎所有常见编程语言的工作原理。 setTimeout(_expandbox(4),3000) 也是如此。它调用_expandbox(4) 并将返回值(undefined)传递给setTimeout。 IE。它相当于setTimeout(undefined, 3000)。但是,setTimeout 期望它可以在将来调用一个函数,而不是 undefined

标签: javascript jquery


【解决方案1】:

尝试将其包装在匿名函数中:

setTimeout(function() { _expandbox(4); }, 3000);

【讨论】:

  • 谢谢。其实我想知道为什么 setTimeout(_expandbox(4),3000);无法给出正确答案。
  • setTimeout的第一个参数是一个函数,setTimeout(_expandbox(4),3000);_expandbox(4)的返回值作为参数传递,无效。
  • @Dhwani91 - 每当您添加括号时,您都会立即调用该函数并传递返回值,在本例中为undefinedsetTimeout调用带括号的函数和引用只带名称的函数是有区别的,稍后调用。
  • 谢谢。现在它消除了我的疑问,@adeneo
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
相关资源
最近更新 更多