3

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

像:

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);
}

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

4

2 回答 2

5

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

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");

更新

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

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

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

于 2012-11-01T14:46:34.543 回答
0

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

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

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

// then
someGlobal(James, Amber);

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

于 2012-11-01T14:42:41.807 回答