Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[规则问题]vars-on-top #22

Closed
mengjian-github opened this issue Nov 24, 2017 · 5 comments
Closed

[规则问题]vars-on-top #22

mengjian-github opened this issue Nov 24, 2017 · 5 comments

Comments

@mengjian-github
Copy link

'vars-on-top': 'off',

var引起变量提升,应该放在作用域顶端来定义,实际上应该推荐no-var,如果一定要使用var,不应该让它进行作用域的提升,这是一个好的实践。

建议打开该规则。

@lcxfs1991
Copy link
Contributor

目前已经设置了no-var

@mengjian-github
Copy link
Author

@lcxfs1991 所以这项规则要打开嘛,保持思想一致性~

@xcatliu
Copy link
Member

xcatliu commented Nov 24, 2017

当一个函数比较长时,var 都定义在最前面,而在后面才被赋值的话,阅读起来会比较麻烦——

  • 它是第一次被赋值吗?
  • 它是局部变量还是全局变量?
  • 它是函数参数传进来的吗?

@mengjian-github
Copy link
Author

@xcatliu 这条规则是用来限定var的,因为var后定义会进行变量提升,避免先使用后定义的情况。
不过对你说的这几个问题我有一些看法:

首先,一个函数比较长,就应该反思一下是否可以拆分为多个函数,往往一个长函数无法保证单一职责原则了。

其次,一个变量是局部变量还是全局变量,和定义的远近其实没有必然联系,一个变量往往有多处被使用的地方,并不能保证使用时一定能够在就近的地方定义,是否隐式定义全局变量要靠工具去检测,按照这个说法,我也可以说看到一个后面定义的变量,我还会担心这个变量到底是被定义过了还是没定义过呢?

最后,函数传参本身不需要定义,无论是前定义和后定义,而且这类查找应该借助的是编辑器的goto definition功能,而不是凭猜测来看是哪里定义的。

@xcatliu
Copy link
Member

xcatliu commented Dec 8, 2017

我们会要求一个函数尽量短,但是现实中有时确实很难做到,所以才没有限制一个函数的最大长度,只限制了复杂度,只要是线性的,太长也没关系。
看到一个后面定义的变量,不需要担心它在前面有没有被定义过,因为如果它在前面已经被定义过了,eslint 就会报错了。

@xcatliu xcatliu closed this as completed Dec 8, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants