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

2021-02-01  本文已影响0人  mark666

在读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

上一篇下一篇

猜你喜欢

热点阅读