变量提升和函数提升
首先使用var声明变量会造成变量提升,毫无疑问变量a会被置于代码块顶部,但是下方使用function关键字声明了函数a,函数声明也会提升至代码块顶部,而且优先级更高。
所以实际代码等价于
1
2
3
4
|
function a () {} var a a = 10 console.log( typeof a) |
变量a会覆盖函数a,输出结果为number。
那如果这里使用关键词let呢,代码变为
1
2
3
|
let a = 10 function a () {} console.log( typeof a) |
这里明显会报错。前面提到,函数声明会优先于变量声明,会被提升至代码块顶部,所以会先声明function a ,再执行let a = 10;,但是a已被声明过,不能再使用let 关键字进行重声明。所以这里应当注意函数声明提升的问题,即便let声明变量的语句被置于代码块顶部,但是需要注意函数声明提升。