簡體   English   中英

JS中的以下定義方式有什么區別?

[英]What's the difference between the following ways of definition in JS?

代碼塊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的結果是一樣的。但是在執行過程中有什么區別嗎?

將括號括在函數周圍的唯一效果是確保將其視為函數表達式。

將其作為任務的RHS也具有這種效果。

因此,兩者之間沒有區別。

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;
    })();

兩者都不會給出錯誤,因為我們明確地將其定義為表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM