JavaScript的; 通过分配给变量创建的函数?

这个问题在这里已经有了答案:

  • 将函数分配给变量或不是1答案之间的区别
  • var functionName = function(){} vs function functionName(){} 32个答案

  • 这被称为函数表达式:

    var foo = function() {}
    

    这是一个函数声明:

    function foo() {}
    

    主要区别在于函数声明是“悬挂”的。 在幕后,一个函数声明被“悬挂”到其作用域的顶部并被分配给一个变量名 - 与函数表达式实际上是一样的。

    考虑这个:

    foo(); //logs 'abc'
    function() {
      console.log('abc');
    }
    

    这很好,因为foo会被吊起来。 用函数表达式,这将失败:

    foo(); //foo is not defined!
    var foo = function() {
      console.log('abc');
    }
    

    关于函数表达式的一点非常棒的是,您可以使用IIFE(立即调用的函数表达式)来分配它们的值,并具有如下的私有值和函数:

    var myFunc = (function() {
      function thisWillBeMyFunc() {
        doOne();
        doTwo();
        doThree();
      }
    
      function doOne() {
        console.log('Action 1!');
      }
      function doTwo() {
        console.log('Action 2!');
      }
      function doThree() {
        console.log('Action 3!');
      }
    
      return thisWillBeMyFunc;
    }());
    
    myFunc(); //logs the actions
    
    doOne(); //error - not defined!
    

    现场演示(点击)。

    哦,JavaScript的强大功能和灵活性!


    还有一个区别。 第一个创建一个命名函数,第二个选项将创建一个匿名函数。

    在查看堆栈跟踪时,第二个选项将显示为匿名函数,第一个将显示为named。 您可以看到第一种方法在调试时会给您一些洞察。

    在这里和这里进一步引用。

    链接地址: http://www.djcxy.com/p/96293.html

    上一篇: Javascript; functions created by assigning to a variable?

    下一篇: JavaScript object instantiation options