JS中以下定义方式之间的区别是什么?

时间:2015-03-30 10:17:13

标签: javascript function

代码块1:

var a = (function(){
    var obj = {a:'1',b:'2'};
    return obj;
})();
console.log(a);  

代码块2:

var a = function(){
    var obj = {a:'1',b:'2'};
    return obj;
}();
console.log(a);  

我知道console.log的结果是一样的。但执行过程中是否有任何区别?

2 个答案:

答案 0 :(得分:2)

将括号括在函数周围的唯一效果是确保将其视为函数表达式。

将其作为任务的RHS也具有这种效果。

因此,两者之间没有区别。

答案 1 :(得分:1)

var a = (function(){
    var obj = {a:'1',b:'2'};
    return obj;
})();
console.log(a);  

该函数是IIFE(立即调用的函数表达式)。

将调用该函数,并将返回的值分配给a

在第二个表达式中,只有语法不同,但功能相同。但作为一种良好的做法,将函数包装在()中是件好事。如果您只使用下面的代码,则会出错。

function(){
    var obj = {a:'1',b:'2'};
    return obj;
}();

(function(){
        var obj = {a:'1',b:'2'};
        return obj;
    }());

(function(){
        var obj = {a:'1',b:'2'};
        return obj;
    })();

两者都不会给出错误,因为我们明确地将其定义为表达式。