javascript - 在定义函数的同时调用函数的快捷方式

时间:2010-08-22 08:37:13

标签: javascript function

在定义的同时调用一个函数,我一直在使用:

var newfunc = function() {
    alert('hi');
};
newfunc();

以下是正确组合这两种方法的方法:

var newfunc = function() {
    alert('hi');
}();

5 个答案:

答案 0 :(得分:4)

没有。您的第二个示例将立即调用匿名函数并将其返回值分配给newfunc

adamse描述了一种似乎有效的方法。我仍然避免这种方法,因为两步过程更容易阅读,因此更容易维护。

答案 1 :(得分:4)

var newfunc = function f() {
    alert("hi!");
    return f;
}();

具有命名函数表达式允许函数递归调用自身,或者在这种情况下返回自身。然而,这个功能总会自行返回,这可能是一个烦恼。

答案 2 :(得分:3)

您希望这样做有很多原因。我不确定你的是什么,但让我介绍一些最喜欢的模式:

模式#1:单身人士。该函数被执行,然后成为单个对象,供代码的其他组件使用。

var singletonObject = new function() {

    // example private variables and functions
    var variable1 = {};
    var variable2 = {};
    var privateFunction = function() { 
    };

    // example public functions
    this.getData = function() { 
        return privateFunction(variable1, variable2);
    };

    // example initialisation code that will only run once
    variable1.isInitialised = true;
};

模式#2:自动执行匿名函数......因为太多原因而非常方便!

// Declare an anonymous function body. 
// Wrap it in parenthesis to make it an "expression.
// Execute it by adding "();"
(function(){})();

这是一个为对象创建命名空间的示例。 我使用“NS”作为示例命名空间:

// declare the anonymous function, this time passing in some parameters
(function($, NS) {

    // do whatever you like here

   // execute the function, passing in the required parameters. 
   // note that the "NS" namespace is created if it doesn't already exist
})(jQuery, (window.NS = window.NS || {}));

您还可以使用.call或.apply而不是通常的括号来设置自执行函数的上下文,如下所示:

(function($){
    // 'this' now refers to the window.NS object

}).call(window.NS = window.NS || {}, jQuery);

(function($){
    // 'this' now refers to the window.NS object

}).apply(window.NS = window.NS || {}, [jQuery]);

答案 3 :(得分:2)

如果我理解你的问题,请尝试一下:

(f = function (msg) {
  msg =  msg ? msg : 'default value';
  alert(msg); }
)();


f('I\'m not the default value!');

您将收到两个提醒,第一个提示“默认值”,第二个提示“我不是默认值。您可以在jsBin看到它。点击'预览'让它运行。

答案 4 :(得分:-1)

你可以这样做:

o = {};
o.newfunc = ( function() {

function f() {
    alert('hi');
}
f();
return {
    f : f
};
}
)();

然后调用函数:

o.newfunc.f();

还会呈现警告信息