请解释JavaScript中function关键字与const声明函数的区别
你代码里的isBeginner是函数声明(用function关键字直接声明),isBeginner2是函数表达式(把匿名函数赋值给const变量),二者核心区别如下:
声明提升差异
函数声明会被JavaScript引擎"提升"到当前作用域的顶部,意思是哪怕你把console.log(isBeginner(2, 4))写在函数定义代码的前面,也能正常执行;但isBeginner2作为const赋值的函数表达式,必须在声明之后才能调用,提前调用会抛出"isBeginner2 is not defined"或者暂时性死区的错误。可修改性不同
函数声明在非严格模式下可以被重新覆盖,比如后续再写function isBeginner() { return 0 },会直接替换掉原来的函数逻辑;而const声明的函数表达式,其变量引用不可被修改,你不能再写isBeginner2 = function() {},否则会直接报错。(注:函数内部的逻辑还是可以修改的,只是不能替换整个函数的引用)全局作用域下的挂载差异
在浏览器环境的全局作用域中,函数声明会自动挂载到window对象上(比如可以通过window.isBeginner访问到这个函数);但const声明的变量不会挂载到全局对象,window.isBeginner2会返回undefined。使用场景不同
函数声明适合定义那些需要在代码任意位置调用的通用函数,写法更直接;函数表达式(尤其是用const赋值)适合作为回调函数、临时函数,或者需要确保函数引用不被意外修改的场景,也可以进一步简化为箭头函数const isBeginner2 = (lib) => { ... }。
内容的提问来源于stack exchange,提问作者emjKamara

