在JavaScript中使用const
可以设置哪些类型的值,特别是函数,有什么限制吗?这是有效的吗?诚然它确实有效,但这是不是出于任何原因而被认为是坏做法?
const doSomething = () => {
...
}
在ES6中,所有函数都应该这样定义吗?如果是这样的话,这似乎还没有流行起来。
发布于 2015-10-09 22:33:26
您所做的没有问题,但是您必须记住函数声明和函数表达式之间的区别。
函数声明,即:
function doSomething () {}
完全提升到作用域的顶部(像let
和const
一样,它们也是块作用域)。
这意味着以下内容将会起作用:
doSomething() // works!
function doSomething() {}
函数表达式,即:
[const | let | var] = function () {} (or () =>
是创建一个匿名函数(function () {}
)和创建一个变量,然后将该匿名函数赋值给该变量。
因此,在作用域中提升变量的通常规则--块作用域的变量(let
和const
)不会作为undefined
提升到其块作用域的顶部。
这意味着:
if (true) {
doSomething() // will fail
const doSomething = function () {}
}
将失败,因为未定义doSomething
。(它将抛出一个ReferenceError
)
如果您切换到使用var
,您将获得变量的提升,但它将被初始化为undefined
,因此上面的代码块仍然不起作用。(这将抛出一个TypeError
,因为doSomething
在您调用它时不是一个函数)
就标准实践而言,您应该始终使用适当的工具来完成工作。
Axel Rauschmayer有一篇关于作用域和提升的很好的文章,包括es6语义:Variables and Scoping in ES6
https://stackoverflow.com/questions/33040703
复制相似问题