在声明命名函数后执行该函数
Executing a named function after declaring it
我知道这可以用于匿名函数
(function toBeExecutedImmediately() {
// Code
}());
我有一个函数,我希望在其他地方使用,但也应该立即执行。是否可以用一个语句而不是以下语句来做到这一点?不需要返回值。
function toBeExecutedImmediately() {
// Code
};
toBeExecutedImmediately();
是否可以用一个语句而不是以下语句来做到这一点?
不。正如你所发现的,命名函数表达式(你的第一个示例)不会将名称添加到包含范围(除了在损坏的引擎 上 - 我正在看你,IE8 及更早版本),所以你不能在不做一些事情的情况下在其他地方调用函数来实现这一点,当然对于函数声明(你的第二个示例),你必须给出两次名称。
你最好的选择可能是继续做声明和单独的调用(你的第二个例子)。
我们可能会想出一些复杂的东西,从技术上讲符合"单个语句"的定义,但它不太可能更短。
如果您的目标是简洁,那么这是两个陈述,但很简短:
var f = function() {
// Code
}, toBeExecutedImmediately = f;
f();
但是,虽然相对简短,但我会说清晰度受到影响。
当然,如果您添加帮助程序函数,一切皆有可能。例如:
// The helper
function defineAndExecute(f) {
f();
return f;
}
// using it
var toBeExecutedImmediately = defineAndExecute(function() {
// Do work here
});
该函数在技术上是匿名的,但您可以通过 var
调用它。(你也可以在这里使用命名函数表达式,但当然,据我所知,这会破坏目标 ——而不是重复名称 。
旁注:您的第一个示例不是"匿名函数"。该函数有一个专有名称,它是一个命名函数表达式。只是对于命名函数表达式,与函数声明不同,该名称不会添加到包含范围。
您可以使用命名空间:
// alerts "say yes"
(window.say = function (s) { alert('say ' + s); })('yes');
// alerts "say something"
say('something');
作为对评论的回复,这里是如何使函数本地化:
(function(){
var dontSay;
// alerts "don't say no"
(dontSay = function (s) { alert('don''t say ' + s); })('no');
// alerts "don't say anything"
dontSay('anything');
})();
@JoeSimmons 这确实不是一场革命,但这个问题也不是真正重要的;D
你可以像这样写"函数生成器":
function DeclareAndExecute(name, func) {
window[name] = func;
func();
}
用法:
DeclareAndExecute("toBeExecutedImmediately", function() {
//code here
});
实时测试用例。
这会使用给定的名称将函数添加到全局window
范围并 insta-execute 它。
相关文章:
- 等待回调函数执行
- 暂停函数执行流程,直到ajax请求完成
- Bigcommerce-是否可以在函数执行后更改文本
- 如何对jquery中的未命名函数执行.call()
- 等待函数执行后再继续
- mootools类型的函数将文本作为函数执行
- 停止从另一个函数执行Javascript函数
- Jquery回调函数执行多次
- 如何使即兴 jquery 暂停当前函数执行
- JavaScript 双函数执行
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 如何在 JS 中调用 2 次或更多次时延迟函数执行
- 函数执行的次数超出预期
- JS中函数执行错误
- 为什么这个函数执行了两次
- 从子函数执行父函数;t更新父级'的属性
- 如何在jQuery函数执行's处于活动状态
- 使用javascript函数执行php文件
- jQuery函数执行顺序
- javascript中同步函数执行中的问题