js 预编译

本人今天去面试,去了一个大厂面试,也遇到了一位30多年岁的前端大神,他面试了我一些js基础知识,什么是js预编译,我回答了作用域之类的知识,面试管对我的答案有点失望,我回家之后,对这个问题进行一些研究,这个问题确实很有学问,不过也很有意思,哈哈哈哈,下面我们来一起看看。

什么是预编译?

预编译的四部曲 (这四句是重中之重,当你理解他的时候,对于预编译之类的题目不再话下,百战百胜,哥不吹牛逼)

1 创建oa对象

2找到形参和变量声明,将变量和形参作为ao属性名,值为undefined

3,将实参和形参统一

4,在函数体内找函数声明,赋值函数声明


下面是找到一个百度面试的题目,我们就来分析他把

创建 ao对象 

ao:{ } 

找到形参和变量声明,将变量和形参作为ao属性名,值为undefined

ao:{ a:undefined,  foo:undefined} 

将实参和形参统一

ao:{ a:undefined,  foo:undefined}    

函数内部有实参和形参,函数变量声明  ao:{ a:1,  foo:function(){}}   

到这里预编译就算完成了,开始执行了

console.log(a) //这里的结果一定是1咯 因为ao 里面a是1 

console.log(bar(1)); 这里的结果一定是函数了 因为ao function(){}  return 下面的东西不会执行,因为return foo; 已经把东西返回出去了,而且组织了代码的执行。

皮友们,是不是很简单,哈哈,以后遇到这种问题,啥也不怕了,直接怼面试官。

function bar(a){

console.log(a)

return foo;

foo=10;

function foo(){

}

var foo=11

}

console.log(bar(1));//function(){}

你可能感兴趣的:(js 预编译)