代码之家  ›  专栏  ›  技术社区  ›  Erik Escobedo

这两种在JavaScript中定义函数的方法有什么区别[[副本]

  •  4
  • Erik Escobedo  · 技术社区  · 14 年前

    可能重复:
    Javascript: var functionName = function() {} vs function functionName() {}

    function fancy_function(){
        // Fancy stuff happening here
    }
    

    var fancy_function = function(){
        // Fancy stuff happening here, too.
    }
    

    我在定义一个“普通”函数时使用前一个函数,我将使用一次或多次,在传递另一个函数的回调时使用后一个函数,但这两种方法看起来都很好。

    6 回复  |  直到 7 年前
        1
  •  2
  •   Rob Levine    14 年前

    函数本身没有什么不同,但是后者给了您更多的灵活性,因为您有一个对函数的引用,并且它在被覆盖时的行为方式也不同。

    var myOriginalFunction = function() {
        window.alert("original");
    }
    
    var original = myOriginalFunction;
    
    var myOriginalFunction = function() {
        window.alert("overridden");
     original();
    }
    
    myOriginalFunction();
    

    这将提供一个警报“overrided”,后跟一个警报“original”。

    但是,如果您尝试使用前一种表示法,您会发现您陷入了一个永无止境的警报循环“overidden”。

        2
  •  2
  •   tvanfosson    14 年前

    在第一个示例中,您定义了一个命名函数——该函数总是以该名称命名的。使用相同的名称定义不同的函数将是一个错误(除非您直接指定给window属性)。在第二个示例中,您将定义一个匿名函数并将其指定为变量的值。您可以在以后根据需要将变量的值更改为任何其他函数;当然,在进程中丢失对匿名函数的任何引用,除非您将其存储在其他地方。所以,在这两种情况下,你并不是真的在做同样的事情,尽管你可以这样对待它,如果你愿意的话——并且确保在第二种情况下使用函数之前定义它,尽管它更像是一个变量函数而不是函数本身。

        3
  •  2
  •   meder omuraliev    14 年前
    1. 函数定义
    2. 函数文字赋值

    唯一的区别是,在某些情况下,您可以立即访问前者,而您必须等待后者的分配。

    不要在firebug控制台/解释器中运行它来测试它,而应该在真正的html页面上进行测试。

    say('spotted');
    function say(msg){ alert(msg) }
    

    上面的方法是可行的,但是如果用 var say = function(){} 下面,它会抱怨它还没有定义。

        4
  •  0
  •   Sarfraz    14 年前

    window 对象。后者称为匿名函数。

        5
  •  0
  •   leecbaker    14 年前

    就函数而言,它们的行为是相同的。

    有关更多详细信息,请参见此处: http://javascript.about.com/library/blfunc.htm

        6
  •  0
  •   JAL    14 年前

    用定义的函数 Function(){} 样式在整个程序中都是可用的,无需在代码中比调用它们的位置更早地定义。我想这叫“吊运”。

    cow('spotted');
    function cow(color){ return 'cow is '+color; }
    

    但这是个错误

    cow('spotted');//cow isn't defined yet!
    var cow=function(color){ return 'cow is '+color; }