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