【问题标题】:Use of () in javascript for a function在javascript中使用()作为函数
【发布时间】:2014-11-28 05:21:18
【问题描述】:

对不起,如果这是一个菜鸟问题,但我仍然无法理解其用法的区别,所以我无法在谷歌上搜索正确的关键字来搜索。

我正在关注this 关于闭包的教程。

现在我的查询是针对这段代码的 -

function makeFunc() {
  var name = "Mozilla";
  function displayName() {
    alert(name);
  }
  return displayName;
}

var myFunc = makeFunc();
myFunc();

为什么displayName 作为函数在代码中被引用为属性?作为一个闭包函数,当我尝试此代码时,它需要作为属性返回 -

function makeFunc() {
  var name = "Mozilla";
  function displayName() {
    alert(name);
  }
  return displayName();
}

var myFunc = makeFunc();
myFunc();

输出 - 警告但错误TypeError: myFunc is not a function

让我知道何时使用我在这里缺少的什么或什么基本概念。

【问题讨论】:

    标签: javascript scope closures


    【解决方案1】:

    在理解闭包之前,这是一个从 Javascript 函数范围扩展而来的概念。 闭包:允许在创建的范围内访问某些变量。内部函数可以访问外部函数及其变量。但是外部函数不能访问内部函数内的变量。

    因此,在您的闭包示例中,输出警报“Mozilla”的原因是因为您的内部函数-displayName 会提醒外部函数中声明的 name 变量(displayName 可以访问 makeFunc 函数中的任何变量)。因此,当您的 makeFunc 函数调用内部函数-displayName 时,您将得到一个未定义的 TypeError。当您简单地调用 makeFunc() 时,将输出相同的结果,您会得到未定义的结果。

    【讨论】:

      【解决方案2】:

      "返回显示名称;"正在返回函数 displayName。
      然后将结果设置为 myFunc。

      function makeFunc() {
        var name = "Mozilla";
        function displayName() {
          alert(name);
        }
        return displayName;
      }
      
      var myFunc = makeFunc();
      myFunc();
      

      如果你想到以下就更容易理解了:
      函数 displayName(){}
      作为替代方案: 显示名称 = 函数(){}

      makeFunc = function () {
        var name = "Mozilla";
        displayName = function () {
          alert(name);
        }
        return displayName;
      }
      
      var myFunc = makeFunc();
      myFunc();
      

      【讨论】:

        【解决方案3】:
        return displayName()
        

        这段代码返回的不是函数,而是调用这个函数的结果。

        var myFunc = makeFunc();
        myFunc();
        

        same.in myFunc 不是函数,而是结果。

        尝试这样做:

        return displayName;
        ...
        var myFunc = makeFunc(); //makeFunc() will return displayName() function
        myFunc();
        

        【讨论】:

          【解决方案4】:

          在第一种情况下,您将返回一个以后可以使用的函数引用。在第二种情况下,您将返回 undefined 函数的结果,因为您没有返回任何内容。所以出现错误是因为myFunc 不是对函数的引用,因此无法调用。

          除了上述之外,我不知道你说“财产”是什么意思。

          【讨论】:

          • 谢谢答案..在哪个用例中我们需要return a function reference
          • 当你想存储上下文时,你可以返回一个函数。该函数将引用父函数的变量。
          • Thx 我接受你的回答..虽然我指的是我们在 OOP 编程术语中拥有的属性和方法,像 var name = "Mozilla"; 这样的属性,其中 name 是这里的属性..让我知道在 JavaScript 世界中是否不是这种情况。
          猜你喜欢
          • 2018-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多