正确使用 const 来定义函数
2022-08-29 23:57:54
对于在 JavaScript 中使用哪些类型的值,特别是函数,可以设置哪些类型的值是否有任何限制?这有效吗?当然它确实有效,但它是否因任何原因被认为是不良做法?const
const doSomething = () => {
...
}
在ES6中,所有函数都应该以这种方式定义吗?如果是这样的话,这似乎并没有流行起来。
对于在 JavaScript 中使用哪些类型的值,特别是函数,可以设置哪些类型的值是否有任何限制?这有效吗?当然它确实有效,但它是否因任何原因被认为是不良做法?const
const doSomething = () => {
...
}
在ES6中,所有函数都应该以这种方式定义吗?如果是这样的话,这似乎并没有流行起来。
您所做的工作没有问题,但您必须记住函数声明和函数表达式之间的区别。
函数声明,即:
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语义:ES6中的变量和范围
尽管用于定义函数似乎是一种黑客攻击,但它具有一些巨大的优势,使其更优越(在我看来)const
它使函数不可变,因此您不必担心该函数被其他一些代码更改。
你可以使用胖箭头语法,它更短,更干净。
使用箭头函数可以为您处理绑定问题。this
示例function
// define a function
function add(x, y) { return x + y; }
// use it
console.log(add(1, 2)); // 3
// oops, someone mutated your function
add = function (x, y) { return x - y; };
// now this is not what you expected
console.log(add(1, 2)); // -1
与const
// define a function (wow! that is 8 chars shorter)
const add = (x, y) => x + y;
// use it
console.log(add(1, 2)); // 3
// someone tries to mutate the function
add = (x, y) => x - y; // Uncaught TypeError: Assignment to constant variable.
// the intruder fails and your function remains unchanged