【问题标题】:Self invoking function [duplicate]自调用函数
【发布时间】:2016-04-08 18:05:57
【问题描述】:

我对javascript中自调用函数的执行流程有点困惑。

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script>

    var test = function () {
        alert("Test1##");
    }

    var test2 = function () {
        alert("Test2!!");
    }

    (function () {
        test();
    })();

</script>

</body>
</html>

结果:Test2!!。 我希望它会提醒 Test1##,因为我正在调用该特定函数。

但是,如果我在每个函数 testtest2 之后包含分号,结果就是我所期望的:它会提醒 Test1##

它是如何工作的?

【问题讨论】:

  • JavaScript 不是一种以空格分隔的语言。把分号放进去。
  • "但是,如果我在每个函数后面加上分号......结果就是我期望的结果" - 这就是为什么使用分号是个好主意.
  • 在 javaScript 中声明变量后必须包含分号,否则可能会打印出意外结果。 var test = function () { alert("Test1##"); }; var test2 = function () { alert("Test2!!"); }; (函数 () { test(); })();

标签: javascript


【解决方案1】:

您需要使用一些分号。否则,语句会混淆。

我认为发生这种情况的原因是调用test 的函数根本没有被调用,而是作为第一个参数传递给test2

你可以在这里看到这种行为:https://jsfiddle.net/ssgagr3k/

【讨论】:

  • 它确实可以与分号一起正常工作,我想了解js在没有分号时如何处理它。如果从定义的第一个函数开始执行,为什么不打印第一个函数和后面的语句,直到遇到分号?
  • 丹尼尔,你是对的。这可以通过在 test2 的函数中调用 console.log(arguments) 来测试。编辑:*也是。 (我想你的测试也有效:P)
  • 丹尼尔的优秀例子。现在我有更多问题。即使您在自调用函数中删除test() 调用,结果仍然相同。自调用函数内部的调用似乎无关紧要。另外,val 是如何传递给test2() 的?感谢您的回答。
  • @RohitPujar 基本上 test2 被视为自调用函数。
  • 也许 this demo 有助于使其易于理解?否则只会让事情变得更加混乱。
猜你喜欢
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 2012-06-12
  • 2013-02-23
相关资源
最近更新 更多