自我执行并在JS中调用一个函数

时间:2012-11-01 14:33:50

标签: javascript jquery html function

我想有一个函数,可以通过其他函数调用它,并且在声明时可以自行执行。

像:

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

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

2 个答案:

答案 0 :(得分: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);
}

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

答案 1 :(得分:0)

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

如果你的函数没有返回值,你可以利用它并让函数返回自己,使它成为一个立即执行命名的函数表达式,它被赋值给一个变量:

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

// then
someGlobal(James, Amber);

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