不同语法的匿名函数在 JavaScript 中功能相同吗?
在 JavaScript 中, (function() { })() 和 ( function() { }()) 可能会通过连续显示“foo”和“bar”来执行相同的任务。但是,在某些条件下,这两种语法之间存在细微差别。
代码块 1:
(function() { bar = 'bar'; alert('foo'); })(); alert(bar);
代码块 2:
(function() { bar = 'bar'; alert('foo'); }()); alert(bar);
功能等效
在没有任何修改的情况下,两个代码块在功能上等效。他们创建一个匿名函数,立即执行它,然后访问函数中定义的 bar 变量。
与修改的差异
但是,如果您引入这样的修饰符在函数调用之前作为 new 或在函数调用之后添加某些内容,行为会发生变化。
带有 new 和 .prop 的代码块 1:
new (function() { this.prop = 4; }) ().prop;
此代码创建一个匿名函数的新实例并访问其 prop 属性。它返回 4.
带有 new 和 .Class 的代码块 2:
new ( function() { return { Class: function() { } }; }() ).Class;
相反,此代码在 Class 属性上调用 new。由于外括号内有额外的括号,函数调用不是 new 表达式的一部分。相反,它会正常调用该函数并返回其返回值,该返回值是一个类实例。
总而言之,虽然 (function() { })() 和 (function() { }()) 在功能上都是在正常情况下等效,但当与影响其执行方式的修饰符结合使用时,它们的行为会有所不同。
以上是当与修饰符结合使用时,具有不同语法的匿名函数在 JavaScript 中的行为是否有所不同?的详细内容。更多信息请关注PHP中文网其他相关文章!