JavaScript命名函数自动调用

时间:2014-03-31 14:23:56

标签: javascript function

如何自动调用命名函数以便以后调用它?

您可以通过执行以下操作自动调用匿名函数:

(function(){
  console.log('called')
})();

但如果你这样做

(function f(){
  console.log('called')
})();

您稍后无法在代码中使用f()

或者这(抛出错误)

function f(){
  console.log('called')
}();

我知道您可以声明f,然后只需致电f(),但您可以在声明后立即致电吗?

3 个答案:

答案 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();

http://jsfiddle.net/LXEm6/

您在闭包内定义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

DEMO