Javascript &引用;函数foo(bar){}";对;foo=函数(bar){}";

Javascript &引用;函数foo(bar){}";对;foo=函数(bar){}";,javascript,function,variables,Javascript,Function,Variables,及 一个和另一个的好处是什么?我在后者中看到的主要好处是,在已经定义函数名的情况下,不会出现错误。然而,可能还有其他不明显的优点或缺点。它们是什么(如果有的话)?这已经被问了好几次了,似乎是最好的一个。除了将匿名函数赋值给变量之外,您还可以对匿名函数执行其他操作。例如,您可以立即执行它: foo = function(bar) { // ... }; 这有时用于创建代码的作用域。作用域中声明的任何内容都是局部的,您可以将结果返回到外部代码: (function() { ... })()


一个和另一个的好处是什么?我在后者中看到的主要好处是,在已经定义函数名的情况下,不会出现错误。然而,可能还有其他不明显的优点或缺点。它们是什么(如果有的话)?

这已经被问了好几次了,似乎是最好的一个。

除了将匿名函数赋值给变量之外,您还可以对匿名函数执行其他操作。例如,您可以立即执行它:

foo = function(bar) {
    // ...
};
这有时用于创建代码的作用域。作用域中声明的任何内容都是局部的,您可以将结果返回到外部代码:

(function() { ... })();
现在变量
a
包含一个显示变量
answer
值的函数,但是变量
answer
是作用域的局部变量:

var a = (function() {

  var answer = 42;

  function display() { window.alert(answer); };

  return display;

})();
例如,此模式用于为jQuery创建插件:

a(); // displays the value
display(); // not available
window.alert(answer); // not available
jQuery
对象作为
$
参数发送到作用域中,这样作用域中的代码就可以使用
$
快捷方式,即使它已在作用域外关闭(使用
noConflict

a(); // displays the value
display(); // not available
window.alert(answer); // not available
(function($) {

  $.fn.blackText = function() {
    return this.css('color', '#000');
  };

}(jQuery);