關于js 中(0, function)() 的疑惑

在讀Webpack 源碼中有出現 類似以下代碼

(0, function)()

在 statckflow 上找到了同類的問題

statckflow

import { a } from 'b';

function x () {
  a()
}

經過 babel 編譯后

'use strict';

var _b = require('b');

function x() {
  (0, _b.a)();
}

我們認識的逗號操作符 對它的每個操作對象求值(從左至右),然后返回最后一個操作對象的值。

例如:

console.log((1, 2)); // Returns 2 in console
console.log((a = b = 3, c = 4)); // Returns 4 in console

那么這么寫有什么用處呢?

一個回答者給出的例子

var a = {
  foo: function() {
    console.log(this === window);
  }
};

a.foo(); // Returns 'false' in console
(0, a.foo)(); // Returns 'true' in console

(0, a.foo) 表達式從左到右進行執行,會返回最后一個操作的值,那么就等同于

function() {
  console.log(this === window);
}

這時候 this的是全局對象 window, 所以打印結果為 true

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容