JS中(0, fn)(args)

umi源码中有

const args = (0, _utils().yParser)(process.argv.slice(2), {
  alias: {
    version: ['v'],
    help: ['h']
  },
  boolean: ['version']
});

在js中(0, _utils().yParser)= _utils().yParser,逗号操作符返回最后一个操作数的值,所以(0, _utils().yParser)= _utils().yParser

那这种写法有什么作用呢?

作用一

var a = 0, 
    b = 1, 
    c; 

c = (0,a++, b++, a + 2); 

a; // 1 
b; // 2 
c; // 3 

做叠加使用,但是0是毫无作用的。

js会依次执行 0;a++;b++; a + 2这个四个表达式,最后把a+2结果赋值给c

作用二

(0, foo.fn)(); 

//等价于
var g = foo.fn; 
g(); 

实施例:

var foo = { 
       fullName: "Peter", 
       sayName: function() { console.log("My name is", this.fullName); } 
      }; 

window.fullName = "Shiny"; 

foo.sayName();  // My name is Peter 

(foo.sayName)();  // My name is Peter 

(0, foo.sayName)(); // My name is Shiny 

使用foo.sayName()执行sayName,sayName的this指向foo。

使用(foo.sayName)()执行sayName,sayName的this指向foo。

使用(0, foo.fn)(args)执行fn,fn的this指向window。

它的作用是改变fn的this绑定,把fn中的this绑定到window上

原理是,逗号表达式表示先执行左边,再执行右边,最终返回右边,(0, foo.sayName)相当于返回了foo.sayName的引用,相当于

const sayName =foo.sayName;
sayName(); // My name is Shiny 

推广一下自己开发的微信小程序,有兴趣的朋友可以玩一玩

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值