【问题标题】:About Anonymous Functions in Javascript关于 Javascript 中的匿名函数
【发布时间】:2017-11-06 07:51:07
【问题描述】:

我是 Javascript 新手,但对真正的 OO 语言有深厚的背景,例如 C#、Java、C++... 在 Javascript 中有一个称为匿名函数的概念。这是一个示例代码:

(   function() { 
      for(var x = 0;x<5;x++) {
         console.log(x); 
      } 
   })(); 

正如我所理解的那样,最后的括号使函数自己调用。 还有另一种语法可以做到这一点:

var x =   function() { 
      for(var x = 0;x<5;x++) {
         console.log(x); 
      } 
   }(); 

但是现在如果我尝试使用x,它不会再次执行该函数。那么如果在第二个版本中使用作业,目标是什么?我可以再次通过x使用该功能吗?

【问题讨论】:

  • 因为你在函数之后有(),它会立即调用它并分配它的返回值(在你的情况下,未定义)。删除(),如果您想立即调用它,请在下一行拨打电话,例如:x();
  • 请注意 JavaScript 不是面向对象的。相反,JS 是面向原型的,总会有让你吃惊的事情。
  • 为什么有人反对这个问题?这对初学者来说是个好问题
  • 第一个没有var x = 的其实是IIFE stackoverflow.com/questions/8228281/…
  • var x 是调用该匿名函数的结果......在这种情况下......是undefined,因为它没有返回

标签: javascript


【解决方案1】:

自执行函数被称为 IIFE(立即调用函数表达式),它通常用于控制作用域,因此您最终不会得到很多全局变量。

比如这个函数就像一个moneybox,它封装了你“钱”的所有信息,所以你只能插入钱或者获取总钱,但是你不能直接调用add/get来访问变量。

它也可以用作 OOP 的一种形式,因为您已经非常熟悉它了

var myMoneyBox = (function() {
    var money = 0;

    function addMoney(x) {
        if (x > 0)
            money += x;
    }

    function getMoney() {
        return money;
    }

    return {
        add: addMoney,
        get: getMoney
    }
})();

myMoneyBox.add(10);
console.log(myMoneyBox.get());

【讨论】:

  • 非常感谢。这使概念更加清晰
【解决方案2】:

x 被分配了函数的结果,就像在任何其他表达式x = f() 中一样,您只需在表达式中定义f。它没有返回值,所以在这种情况下x 的值是undefined

如果您想使用x调用函数,那么不要将() 添加到表达式的末尾...

【讨论】:

  • 可能是自以为是的评论,但这应该是评论
  • 评论是为了澄清,这是一个实际的答案。你的意思是答案很简单,这不应该是一个问题,我同意。
  • 如果你认为这不应该是一个问题,那么当我有这个问题时我应该在哪里问呢? (顺便感谢您的回答,现在很清楚了)
  • @CodePope:在浏览器的控制台中更多地使用自己的代码也可以做到这一点,所以它的工作量有点低。但我拖延了,你的问题是最重要的:-)。有趣的是,高票数和接受的答案完全忽略了您的问题并解释了其他内容。
  • @Rajesh:每当有风险时,我都会把自己当回事,我记得我的最高投票答案是(stackoverflow.com/questions/22988640/…),然后我只能笑...
【解决方案3】:

我认为这可以帮助你:

var x =   function() { 
      for(var x = 0;x<5;x++) {
         console.log(x); 
      } 
   }; 
x();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2010-11-06
    • 2011-03-02
    • 1970-01-01
    相关资源
    最近更新 更多