变量提升

变量提升的原因

JS引擎读取代码时,分为两步,第一步是对整个JS代码进行解析读取,第二步是进行代码的执行。

在代码执行之前,浏览器的解析器遇到变量名和函数声明,将它们提升到当前作用域的最前面。

//变量提升
console.log(a);
var a = "hi";
console.log(a);

//==>

var a;
console.log(a);
a = "hi";
console.log(a);
//函数提升
console.log(a);    //f a()
console.log(b);    //undefined
function a() {
  console.log('hi');  
}
var b = function() {
  console.log('ok');  
}

//==>

function a() {
    console.log('hi');
}
var b;
console.log(a);
console.log(b);
b = function(){
    console.log('ok');
}
//函数提升会优先于变量提升,且不会被同名的变量覆盖,如果这个同名变量已经赋值了,那函数变量会被覆盖
console.log(a);    //f a() {...}
console.log(a());    //2
var a = 1;
function a() {
  console.log(2);  
}
console.log(a);    //1
a = 3;
console.log(a());    //报错,现在的函数a已经被赋值过后的变量a给覆盖了,无法再调用a()
posted @ 2021-02-23 16:00  团叽  阅读(39)  评论(0编辑  收藏  举报