【问题标题】:Self execute and call a function in JSJS中的自执行和调用函数
【发布时间】:2012-11-01 14:33:50
【问题描述】:

我想要一个函数,它可以被其他函数访问以调用它,并且在声明时应该自行执行。

喜欢:

function some(var_one, var_two)
{
    // do something
}(var_one, var_two); // declare and execute (doesn't work)

function add_pair()
{
    // do something
    some(James, Amber);
}

执行此操作的正确语法是什么?

【问题讨论】:

  • 不能在声明后直接调用函数吗?如some(thing1, thing2);
  • @RoryMcCrossan - 假设函数声明后的一对括号旨在调用函数,语法不正确。这些括号根本不会做任何事情,因为您不能调用声明。
  • @JamesAllardice 是的,你是对的,OP 需要在函数声明周围加上括号。
  • @James Allardice 这太琐碎了
  • @Rory McCrossan 它将成为一个匿名函数,无法在外部调用它。

标签: javascript jquery html function


【解决方案1】:

您不能调用函数声明。声明后面的一对括号根本不会做任何事情。你可以这样做:

var some;
(some = function (var_one, var_two) {
    console.log(var_one, var_two);
})("a", "b");

​some("b", "c");​​​​

上面的例子将记录“a,b”,然后是“b,c”。但这看起来有点乱。你可以坚持你所拥有的并像往常一样调用函数:

function some(var_one, var_two) {
    console.log(var_one, var_two);
}
some("a", "b");

更新

请注意,通过将函数声明更改为表达式(这是我上面的第一个示例中发生的情况),您删除了调用函数的能力 before 它似乎是在源中声明的,因为声明被提升到它们出现的范围的顶部,并且分配发生在适当的位置。使用函数声明,以下示例完美运行:

some("a", "b"); // Call it before it appears to be declared
function some(var_one, var_two) {
    console.log(var_one, var_two);
}

我真的看不出有什么理由需要将声明和调用合二为一。

【讨论】:

  • 很好的例子,但是 "var some" 是多行,就像通常的函数调用一样。
  • @James - 如果您非常关心额外的行,只需将其删除并将some 泄漏到全局范围!除此之外,我认为你不会缩短它。
【解决方案2】:

不,你不能同时声明和执行(除非在 IE 中,创建两个不同的函数)。看看http://kangax.github.com/nfe/

如果您的函数没有返回值,您可以利用它并让函数返回自身,使其成为分配给变量的立即执行命名函数表达式:

var someGlobal = (function some(args) {
    // do something
    return some;
})(now_args);

// then
someGlobal(James, Amber);

最好使用声明调用,以使事情更清晰。

【讨论】:

  • 如果您必须返回 some 本身,则该函数将无法返回它实际打算返回的任何内容(如果它打算返回某些内容)。所以“更好地使用声明和调用”可能是一个更好的建议。
  • 是的,我已经写过“如果函数没有返回值”。您分配和执行的函数表达式看起来好多了:-)
  • "未定义不是函数"
  • @Bergi - 我不会说“更好”,这是一团糟 :) 我看不出你有任何理由需要通过一个简单的声明来执行此操作,然后一个简单的调用。抱歉,没有注意到您已经提到了返回值部分。
  • @James:嗯?不调用未定义的东西。 Worksforme
猜你喜欢
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多