使用void前缀函数调用

时间:2018-04-11 15:57:01

标签: javascript

我遇到过这段代码:

return someFunctionThatReturnsAnArray()
  .map((action) => void dispatch(action))
  .run();

有人可以建议您为什么在地图函数中添加void前缀,以便每次都返回undefined吗?

3 个答案:

答案 0 :(得分:2)

这实际上是一种定义返回undefined的函数的聪明方法。

来自MDN

  

void运算符计算给定的表达式,然后返回undefined。

您的代码基本上与以下内容相同:

return someFunctionThatReturnsAnArray()
  .map((action) => { dispatch(action); })
  .run();

我会说实话:如果我在与我合作的任何项目中遇到过该代码,我会将其标记为待审核。它并没有真正意义,而且可能令人困惑。

答案 1 :(得分:0)

  

void运算符允许计算生成值的表达式   到表达式为undefined的表达式   期望的。

所以看起来像:

  • 只要调用dispatch方法,其返回值就不重要了
  • map方法的结果是一个值为undefined的数组,但其长度等于已分派的调用数
  • run方法不是数组原型的标准(似乎是自定义补丁),因此很难说它的作用。

其中一个用法是调度调用的信息



Array.prototype.run = function() {
  console.log("Dispatched calls : " + this.length);
};

var getArray = function() {
  return ['1', '2', '3'];
}

var dispatch = function(n) {
  return 10*n;
}

getArray().map((action) => void dispatch(action)).run();




答案 2 :(得分:0)

取自https://eslint.org/docs/rules/no-void

  

void运算符接受一个操作数并返回undefined:void   表达式将计算表达式并返回undefined。有可能   用来忽略表达可能产生的任何副作用:

     

使用void运算符的常见情况是获得“纯”未定义   在ES5之前的值,未定义的变量是可变的:

// will always return undefined
(function(){
    return void 0;
})();

// will return 1 in ES3 and undefined in ES5+
(function(){
    undefined = 1;
    return undefined;
})();

// will throw TypeError in ES5+
(function(){
    'use strict';
    undefined = 1;
})();
     

另一个常见的情况是缩小代码,因为void 0小于   未定义:

foo = void 0;
foo = undefined; 
     

当与IIFE(立即调用的函数表达式)一起使用时,无效   可以用来逼迫

     

将function关键字视为表达式而不是a   声明:

var foo = 1;
void function(){ foo = 1; }() // will assign foo a value of 1
+function(){ foo = 1; }() // same as above
function(){ foo = 1; }() // will throw SyntaxError
     

某些代码样式禁止void运算符,将其标记为非显而易见的   难以阅读。

看不出有任何理由在您提供的代码段中使用它。