当前位置: 首页 > 工具软件 > Args.js > 使用案例 >

JS中(0, fn)(args)

亢建白
2023-12-01

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 

 类似资料: