首页  >  文章  >  web前端  >  JavaScript 中的 `})()` 和 `}());` 之间有功能差异吗?

JavaScript 中的 `})()` 和 `}());` 之间有功能差异吗?

Patricia Arquette
Patricia Arquette原创
2024-10-31 09:18:29252浏览

Is There a Functional Difference Between `})()` and `}());` in JavaScript?

JavaScript 中的函数调用语法:探索细微差别

在 JavaScript 中,调用函数的语法可能会有所不同,从而导致有关其功能的问题等价。考虑以下两个代码块:

(function() {
    bar = 'bar';
    alert('foo');
})();

alert(bar);
(function() {
    bar = 'bar';
    alert('foo');
}());

alert(bar);

两个代码块都成功警报“foo”,然后警报“bar”。唯一明显的区别似乎是 })() 和 }()); 的使用。在最后。那么,这两种方法之间有功能区别吗?

相同的功能

在这种特定场景中,两种语法之间不存在功能差异。两种形式都执行匿名函数中的代码,将值“bar”分配给变量 bar 并按预期显示警报消息。因此,它们在功能上是等效的。

出现差异时

但是,在某些情况下,两种语法会产生不同的结果。考虑以下修改:

new (function() {
    this.prop = 4;
})().prop;
new ( function() {
    return { Class: function() { } }; 
}() ).Class;

在第一个代码块中, new 用于创建类的新实例,并访问该实例的 prop 属性。这将返回值 4。

相反,第二个代码块对函数返回的对象的 Class 属性调用 new。由于函数调用周围的括号位于外括号内,因此它们不会触发 new 而是正常执行函数。因此,Class 属性被实例化。

结论

在大多数情况下,})() 和 }());对于调用函数可以互换,没有任何功能影响。但是,如果在括号之前使用 new 或在括号之后执行操作,则语法可能会影响代码的行为。了解这些细微差别对于编写按预期运行的 JavaScript 代码至关重要。

以上是JavaScript 中的 `})()` 和 `}());` 之间有功能差异吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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