JS的预解析

首先考虑几个问题,以下代码都会输出什么?

第1问

console.log(num);

 

第2问

console.log(num);
var num=10;

 

第3问

function fn(){
console.log(11);
}
fn();

 

第4问

fun();
var fun=function(){
console.log(22);
}

js引擎运行js分两步:预解析,代码执行。

预解析:js引擎会把js里面所有的var还有function提升到当前作用域 的最前面。

代码执行:按照代码书写的顺序自上而下执行

预解析分为变量预解析(变量提升)和函数预解析(函数提升)

变量预解析(变量提升)是把所有的变量声明提升到当前作用域的前面,不提升赋值操作

console.log(num);
var num=10

相当于

var num;

console.log(num);

num=10;

所以,输出为undefined

 

 

 

fun();
var fun=function(){
console.log(22);
}

相当于

var fun;

fun();

fun=function(){
console.log(22);
}

变量未被赋值,故输出报错fun不是一个函数。

函数预解析(函数提升)就是把所有的函数声明提升到当前作用域的最前面,不调用函数。

function fn(){
console.log(11);
}
fn();
fn();
function fn(){
console.log(11);
}
可以正常执行

 

未经允许不得转载:王刚博客 » JS的预解析

赞 (0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏