您的位置:首页 > Web前端 > JavaScript

JavaScript的解析器是个什么东西

2016-11-30 16:03 288 查看
最近啃JavaScript基础,看到老师讲几道面试题还挺有意思!

第一题:

var num = 10;
fun();
function fun(){
console.log(num);
var num = 20;
}


第二题

var a = 18;
f1();
function f1() {
var b = 9;
console.log(a);
console.log(b);
var a = "123";
}


第三题

f1();
console.log(c);
console.log(b);
console.log(a);
function f1(){
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}


这三道题如果你懂JavaScript的解析器原理的话就很容易了!

JavaScript代码时由浏览器中的解析器执行的:

解析器:

预解析

先找 var 和 function 和 参数

2.解析一行执行一行

第一道题:

var num = 10;
fun();
function fun(){
console.log(num);
var num = 20;
}


第一步经过预解析,找到var和function

//var和function提到前面去
var num;
function fun(){
console.log(num);
var num = 20;
}
num = 10;
fun();


第二步执行代码,执行到function时,再进行一次预解析

//第一步var和function提到前面去
var num;
function fun(){
//第二步解析function,找到var提到前面来
var num;
console.log(num);
num = 20;
}
num = 10;
fun();


接下来就是一步一步执行代码了,在执行的过程中你会发现function中的console.log(num);的num是undefined?

是的,结果就是undefined

后面两道题原理就和第一道题一样,最后一道题要提醒一点:

var a = b = c = 9;


这句语句在执行之后a是局部变量,因为是用var定义的

b c 是局部变量,因为它没有用var定义,所以执行的结果也有差异
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: