首页  >  文章  >  web前端  >  当与修饰符结合使用时,具有不同语法的匿名函数在 JavaScript 中的行为是否有所不同?

当与修饰符结合使用时,具有不同语法的匿名函数在 JavaScript 中的行为是否有所不同?

Susan Sarandon
Susan Sarandon原创
2024-10-30 15:17:02850浏览

Do Anonymous Functions with Different Syntax Behave Differently in JavaScript When Combined with Modifiers?

不同语法的匿名函数在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn