我想有一个函数,可以通过其他函数调用它,并且在声明时可以自行执行。
像:
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);
}
执行此操作的正确语法是什么?
答案 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);
最好使用声明和调用,以使事情更清晰。