为了回答最初的问题,纯Javascript中noop函数最优雅,最整洁的实现(这里也讨论了)是Function.prototype。这是因为:
- Function.prototype是一个函数:
typeof Function.prototype === "function" // returns true
- 它可以作为函数调用,基本上不执行任何操作,如下所示:
setTimeout(function() {
console.log('Start: ', Date.now());
Function.prototype();
console.log('End : ', Date.now());
}, 1000);
虽然这是一个“真正的noop”,因为大多数浏览器似乎不做任何事情来执行以这种方式定义的noop(从而节省CPU周期),但可能存在一些与此相关的性能问题(正如其他人在评论或其他答案中提到的那样)。
但是,话虽如此,您可以轻松定义自己的noop函数,并且实际上,许多库和框架也提供noop函数。以下是一些示例:
var noop = function () {}; // Define your own noop in ES3 or ES5
const noop = () => {}; // Define in ES6 as Lambda (arrow function)
setTimeout(noop, 10000); // Using the predefined noop
setTimeout(function () {} , 10000); // Using directly in ES3 or ES5
setTimeout(() => {} , 10000); // Using directly in ES6 as Lambda (arrow function)
setTimeout(angular.noop, 10000); // Using with AngularJS 1.x
setTimeout(jQuery.noop, 10000); // Using with jQuery
以下是noop函数(或相关讨论或谷歌搜索)的各种实现的字母顺序列表:
AngularJS 1.x,Angular 2+(似乎没有原生实现 - 使用你自己的如上所示),Ember,jQuery,Lodash,NodeJS,Ramda,React(似乎没有原生实现 - 使用你自己的如上所示),RxJS,Underscore
底线:尽管 Function.prototype 是一种在 Javascript 中表达 noop 的优雅方式,但是,可能存在一些与它的使用相关的性能问题。因此,您可以定义和使用自己的(如上所示),也可以使用可能在代码中使用的库/框架定义的库/框架。