js变量定义的函数不会“函数提升"吗?

张巨侠
  • 342

如题
image.png

回复
阅读 709
4 个回答

1、函数声明

function a () {}

2、函数表达式

const b = function () {}

这是两个不同的概念;具体的请看

两个问题:
1、不是所有变量声明都会提升,只有var才会,let/const有暂时性死区,在声明语句前使用都会报错,不管值是不是函数。
2、即使使用var了也不会提升赋值语句,要注意声明提升提升的到底是啥。仅仅是提升这个变量名,赋值语句还是在原来的位置,举例如下:

console.log(a);
var a = 1;

等价于

var a;
console.log(a);
a = 1;

这个问题有意思。

首先,这里报错确实是因为在声明 b 之前使用了 b,用 const 或者 let 都会这样,不用纠结原因,记住不能在声明前使用就对了。

问题是,就算改成 var,仍然会报错,只不过报的是:b 不是函数。

var 可以让变量声明提升,但声明(更准确地说是 Initialization,初始化)只会给它默认的 undefined,赋值为函数,是在使用(调用 b())之后的事情,所以会报这个错。

const 声明的变量b是没有变量提升的过程的,如果使用var b ,则b变量会存在变量提升的过程

宣传栏