美文网首页
关于js 中(0, function)() 的疑惑

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

作者: mark666 | 来源:发表于2021-02-01 15:00 被阅读0次

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

    相关文章

      网友评论

          本文标题:关于js 中(0, function)() 的疑惑

          本文链接:https://www.haomeiwen.com/subject/pxcctltx.html