当前位置: 首页 > 面试题库 >

为什么Airbnb风格指南说不鼓励依赖函数名推断?

任昊阳
2023-03-14
问题内容
// bad
class Listing extends React.Component {
  render() {
    return <div>{this.props.hello}</div>;
  }
}

// bad (relying on function name inference is discouraged)
const Listing = ({ hello }) => (
  <div>{hello}</div>
);

// good
function Listing({ hello }) {
  return <div>{hello}</div>;
}

这取自Airbnb react样式指南。有人可以解释为什么“不鼓励依赖函数名推断”吗?只是样式问题吗?


问题答案:

我认为这也可能与您可能会遇到的意外行为有关,从隐式地将词法名称赋予您可能希望使用的匿名函数可能会遇到这种意外行为。

例如说有人理解了箭头功能:

(x) => x+2;

要使常规功能等效:

function(x) {
  return x+2;
}

期望这段代码非常容易:

let foo = (x) => x+2;

然后等于:

let foo = function(x) {
  return x+2;
}

该函数仍然是匿名的,无法引用自身来执行诸如递归的操作。

因此,如果那时,在我们幸福的无知中,我们发生了这样的事情:

let foo = (x) => (x<2) ? foo(2) : "foo(1)? I should be a reference error";
console.log(foo(1));

它会成功运行,因为该函数显然不是匿名的:

let foo = function foo(x) {
  return (x<2) ? foo(2) : "foo(1)? I should be a reference error";
}

在其他情况下,如果Babel隐式为匿名函数添加名称,这一事实可能会加剧这种情况(尽管我可能错了,但我认为实际上首先支持隐式函数名有些副作用。
),他们可以正确处理任何极端情况,并在您期望的地方抛出参考错误。

例如:

let foo = {
  bar: function() {}
}

// Will surprisingly transpile to..

var foo = {
  bar: function bar() {}
};


// But doing something like:

var foo = {
  bar: function(x) {
    return (x<2) ? bar(2) : 'Whats happening!?';
  }
}

console.log(foo.bar(1));

// Will correctly cause a ReferenceError: bar is not defined

您可以在此快速演示中检查“查看已编译”,以了解Babel实际如何进行转译以维护匿名函数的行为。

简而言之,明确地说明正在执行的操作通常是一个好主意,因为您确切知道对代码的期望。不鼓励使用隐式函数命名,这可能是支持这一点的风格选择,同时也保持简洁明了。

可能正在吊装。但是,嘿,有趣的旅行。



 类似资料:
  • 这来自Airbnb react样式指南。有人能解释一下为什么“不鼓励依赖函数名推断”吗?这只是一个风格问题吗?

  • 这是 Airbnb 的 Ruby 代码风格指南,指南灵感来自于 Github 的指南 和 Bozhidar Batsov 的指南,Airbnb 也在维护 JavaScript 风格指南。

  • 大多数在线来源都表明您可以静态链接glibc,但不鼓励这样做;例如centos包repo: glibc静态包包含用于静态链接的C库静态库。你不需要这些,除非你静态链接,这是非常不鼓励的。 这些消息来源很少(或从未)说明为什么这是个坏主意。

  • 最近,我开始查看各种JavaScript样式指南,我最喜欢Airbnb。 然而,当我用Airbnb样式指南配置ESLint时,我注意到他们文档中定义的一些规则根本没有被检查。例如: 将所有,然后将所有分组 所以,如果你以这段代码为例: 过梁应抛出3个错误: 我没有将所有consts和let分组,我按顺序定义了它们。 我没有在if语句中使用显式比较-

  • 介绍 在参与 Vant 开发时,请遵守约定的单文件组件风格指南,指南内容节选自 Vue 官方风格指南。 组件数据 组件的 data 必须是一个函数。 // bad export default { data: { foo: 'bar', }, }; // good export default { data() { return { foo: 'bar',

  • 这是CatLib特有的代码风格指南,如果您在您的项目中使用CatLib,为了避免错误,降低沟通成本,小纠结和 反模式,阅读本指南是一份不错的选择。 我们不能保证风格指南中的所有内容,对于所有工程和团队都是理想的,所以根据项目环境,周围技术环境,风格出现偏差是可行的。 我们应该尽可能的遵守本风格指南提出的建议。 根据周围技术堆栈对于命名规范相关我们建议您阅读微软提供的:框架设计指南 优先级定义 (A