预解析、变量提升练习

45 阅读1分钟
(function(){              (function(){
    var a=b=3     =====>    b = 3; var a =b
})()                       })()  
console.log(a);              
console.log(b);     // 报错    a is not defined    先打印b的话  b=3 
// a在函数作用域中 外面打印会报错,b直接赋值 属于全局
for (var i = 1; i <=3 ;i++) {
    setTimeout(function(){
        console.log(i);
    },0)
}  
// 先执行主线程for--在将settimeout放入异步队列中等待--继续执行下一个for--for执行完毕  i=4
//  for执行完毕i=4再执行异步(循环三次有三个定时器)   输出结果为  4,4,4 
for (let i = 1; i <=3 ;i++) {
    setTimeout(function(){
        console.log(i);
    },0)
}  
// 1,2,3      let形成块级作用域
function fun(n){                               var n
    console.log(n);                        function fun(n){
    var n =456                               var n 
    console.log(n);       =====>             console.log(n);  
}                                             n =456 
var n = 123                                  console.log(n);
fun(n)                                     }   
                                             n = 123  
                                             fun(n)   
                                             
  // 123,456
function fun(){                               var n
    console.log(n);                        function fun(){
    var n =456                               var n 
    console.log(n);       =====>             console.log(n);  
}                                             n =456 
var n = 123                                  console.log(n);
fun(n)                                     }   
                                             n = 123  
                                             fun(n)   
                                             
  // undefined,456
function fun(){
    console.log(fun);
    var fun =456
    console.log(fun);
}
fun()
var fun = 123

image.png 函数提升的优先级高于变量提升的优先级

image.png

image.png

image.png image.png image.png

image.png

image.png

image.png

image.png

image.png