首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >正确使用const来定义函数

正确使用const来定义函数
EN

Stack Overflow用户
提问于 2015-10-09 22:22:01
回答 1查看 225.6K关注 0票数 272

在JavaScript中使用const可以设置哪些类型的值,特别是函数,有什么限制吗?这是有效的吗?诚然它确实有效,但这是不是出于任何原因而被认为是坏做法?

代码语言:javascript
复制
const doSomething = () => {
   ...
}

在ES6中,所有函数都应该这样定义吗?如果是这样的话,这似乎还没有流行起来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-09 22:33:26

您所做的没有问题,但是您必须记住函数声明和函数表达式之间的区别。

函数声明,即:

代码语言:javascript
复制
function doSomething () {}

完全提升到作用域的顶部(像letconst一样,它们也是块作用域)。

这意味着以下内容将会起作用:

代码语言:javascript
复制
doSomething() // works!
function doSomething() {}

函数表达式,即:

代码语言:javascript
复制
[const | let | var] = function () {} (or () =>

是创建一个匿名函数(function () {})和创建一个变量,然后将该匿名函数赋值给该变量。

因此,在作用域中提升变量的通常规则--块作用域的变量(letconst)不会作为undefined提升到其块作用域的顶部。

这意味着:

代码语言:javascript
复制
if (true) {
    doSomething() // will fail
    const doSomething = function () {}
}

将失败,因为未定义doSomething。(它将抛出一个ReferenceError)

如果您切换到使用var,您将获得变量的提升,但它将被初始化为undefined,因此上面的代码块仍然不起作用。(这将抛出一个TypeError,因为doSomething在您调用它时不是一个函数)

就标准实践而言,您应该始终使用适当的工具来完成工作。

Axel Rauschmayer有一篇关于作用域和提升的很好的文章,包括es6语义:Variables and Scoping in ES6

票数 361
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33040703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档