如何自动调用命名函数以便以后调用它?
您可以通过执行以下操作自动调用匿名函数:
(function(){
console.log('called')
})();
但如果你这样做
(function f(){
console.log('called')
})();
您稍后无法在代码中使用f()
。
或者这(抛出错误)
function f(){
console.log('called')
}();
我知道您可以声明f
,然后只需致电f()
,但您可以在声明后立即致电吗?
答案 0 :(得分:6)
根据你的意愿: 首先,你绝对应该使用你的第三个命题,它更清楚,更重要的是:它不会在不需要时创建一个闭包。
无论如何,如果你想执行一个函数并命名它,你应该将它注册到你当前的范围(默认的是窗口对象)
以下是一个例子:
(window.myFunction = function(){
alert("myFunction called")
})(); //triggers the function
window.myFunction() ; //triggers the function
myFunction() ; //triggers the function as well
答案 1 :(得分:2)
不太确定你想在这里实现什么,但是如何:
var f = (function (){
function f() {
console.log('called');
}
f();
return f;
})();
f();
您在闭包内定义f
并调用它,然后将其返回并将其分配给变量,以便稍后再次使用它。
我不一定暗示这是一个好的模式,但不了解您正在尝试解决的具体问题。
看起来这样做会更简单:
function f() {
console.log('called');
}
(function() {
f(); // calls f immediately
})();
// and later on:
f();
另一个编辑:好的,这是一个非常可怕的解决方案,如果不是在严格模式下也会有效(这是不足以使用它的原因):
var f = (function f() {
console.log("called");
return arguments.callee;
}())
f();
它是第一个解决方案的一个稍微紧凑的版本。
答案 2 :(得分:0)
请尝试以下操作:
(function() {
var f = window.f = function() { // defining f variable like inside a closure but also as a global to be invoked from everywhere
console.log("SOMETHING");
};
f(); // funciton will be invoked
})();
f(); // function will be invoked as well