在JavaScript中会存在一些这样的现象:一个变量在声明之前就可以访问而没有抛出异常,一个函数在声明之前就调用了,也没有抛出异常。
这就涉及到变量或者函数提升
作用域
全局作用域、函数作用域和块作用域。
如果变量定在全局作用域中,那么在审核位置都可以访问该变量;
如果变量定义在函数作用域内,那么只能在该函数内访问变量;
同理,定义在一个代码块中的变量,也就只能在该代码块中访问变量;
块级作用需要使用特定的let或者const关键字定义变量。
变量提升
变量声明会被提升到函数的顶部位置,但是赋值并未提升。【变量提升情况只能出现在var声明的变量】
var a = "90";
(function(){
console.log(a)
})()
var b = "78";
(function(){
console.log(b);
var b = 9000
})()
函数提升
同样的道理,使用函数声明方式定义函数,也会出现函数提升的情况。如下代码段:
show();
var show;
function show(){
console.log("90")
}
show = function(){
console.log(76)
}
函数的提升,会将整个函数体一起提升