这两个JavaScript声明有什么区别?

前端之家收集整理的这篇文章主要介绍了这两个JavaScript声明有什么区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于其中一个,“()”在里面,另一个在外面.他们来了:
var a = (function() {
    return {
        bla: function() {
            console.log('a');
        }
    };
} () );

var b = (function() {
    return {
        bla: function() {
            console.log('b');
        }
    };
}) ();

a.bla();
b.bla();

解决方法

没有区别.

[不必要的]括号只在不同的地方.函数声明已经是表达式,因为它位于它的位置.如果声明在语句上下文中(而且讽刺的是它们会将其转回到表达式上下文中),那么括号将会产生不同的效果,同时仍然导致等效的代码,而不是.

在类似情况下常用的括号是自调用函数.在这种情况下,括号是必需的

function x () { alert("hi!") } ()

被解析为

function x () { alert("hi!") }; ()

当它显示为语句 – 或“块的顶级元素”时,它被解析为“FunctionDeclaration”.因此,通常使用以下形式:

(function () { alert("hi!") })()

这是因为函数…不再是上述的语句,而是一个表达式(被解析为“FunctionExpression”),并且表达式可以继续,所以Automatic Semicolon Insertion不像以前的情况那样发生.另请注意,功能名称可以省略.

然而,因为在post中,函数…出现在a的右边(在“AssignmentExpression”中),因此它已经在表达式上下文中(被解析为“FunctionExpression”),因此没有附加的括号是需要.

所有这些都是相同的,但我更喜欢第二种形式(为了我的代码中的一致性):

a = function () {} ()
b = (function () {}) ()
c = (function () {} ())

快乐编码.

猜你在找的JavaScript相关文章