我想要一个函数,它可以被其他函数访问以调用它,并且在声明时应该自我执行。
像:
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);
}
执行此操作的正确语法是什么?
我想要一个函数,它可以被其他函数访问以调用它,并且在声明时应该自我执行。
像:
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);
}
执行此操作的正确语法是什么?
您不能调用函数声明。声明后面的一对括号根本不会做任何事情。你可以这样做:
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);
}
我真的看不出有什么理由需要将声明和调用合并为一个。
不,你不能同时声明和执行(除非在 IE 中,创建两个不同的函数)。看看http://kangax.github.com/nfe/
如果您的函数没有返回值,您可以利用它并让函数返回自身,使其成为分配给变量的立即执行命名函数表达式:
var someGlobal = (function some(args) {
// do something
return some;
})(now_args);
// then
someGlobal(James, Amber);
最好使用声明和调用,以使事情更清晰。