在JavaScript中“(函数(){})”和“(函数(){}()”)在功能上是否相等?

在JavaScript中“(函数(){})”和“(函数(){}()”)在功能上是否相等?

以下两个代码块都处于警报状态。foo然后bar..唯一的区别是})()}()).

代码1:

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

代码2:

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

那么,除了语法之外,还有什么区别吗?


千万里不及你
浏览 314回答 3
3回答

慕仙森

不,他们是一样的但是,如果添加new事先和.something之后,他们就会不一样了。代码1new (function() {     this.prop = 4;}) ().prop;此代码为该函数的类创建一个新实例,然后获取prop新实例的属性。它回来了4.它相当于function MyClass() {     this.prop = 4;}new MyClass().prop;代码2new ( function() {     return { Class: function() { } }; }() ).Class;此代码调用new在Class财产。由于函数调用的括号位于括号的外部集合内,因此它们不会被new表达式,然后正常调用函数,返回其返回值。这个new表达式解析到.Class实例化了这一点。(后面的括号new是可选的)它相当于var namespace = { Class: function() { } };function getNamespace() { return namespace; }new ( getNamespace() ).Class;//Or,new namespace.Class;的调用周围没有括号。getNamespace(),这将被解析为(new getNamespace()).Class-它将调用实例化getNamespace类并返回Class新实例的属性。

万千封印

没有什么区别-开头的大括号只是一个语法提示,告诉解析器下面的内容是函数表达式而不是功能声明.

烙印99

没什么区别。两者都是函数表达式。还有第三条路:+function() {     bar = 'bar';     alert('foo');}();(而不是+(另一个操作员也能工作)最常见的方法是(function() {     // ...})();尽管如此。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript