如题
两个问题:
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()
)之后的事情,所以会报这个错。
13 回答13k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决
1、函数声明
function a () {}
2、函数表达式
const b = function () {}
这是两个不同的概念;具体的请看