Js预解析的相关随笔

【Js预解析的相关随笔】写这篇文章之前,我看到了中的另一篇文章,链接如下:
前端基础进阶(二):执行上下文详细图解
作者所述的 “执行上下文” 的概念在我看来实是复杂,不是说写的不对或是表述有什么问题,只是偏向底层,并不适合理解,这样的文章放在前端基础进阶的第二篇,对于新手来说是否有些不太友好?
写了一点随笔,寥寥数语,不堪成文。
其实总结起来就一句话,在执行js代码之前,浏览器会对js代码进行预解析。
规则如下:

  • 将变量声明提前到所有代码的最前面;
  • 将函数声明提前到函数声明之后,其他代码之前;
function foo () { console.log('function foo') } var foo = 20; console.log(foo); // 20

我们首先来看一下这段代码经过预解析之后会变成什么样:
var foo function foo () { console.log('function foo') } foo = 20 console.log(foo)

此时再看打印结果,自然也就一目了然了
我们继续往下看:
/* ----- 预解析之前 -----*/console.log(foo); function foo () { console.log('function foo') } var foo = 20; /* ----- 预解析之后 -----*/var foo; //变量声明提至最前 function foo () {//函数声明提到变量声明之后,其他代码之前 console.log('function foo') } console.log(foo); //打印 foo foo = 20

显而易见的是,此时foo代表的是函数,下一行的变量赋值还没有进行,所以打印内容便为foo函数
关于预解析过程,归根结底也就只是开头的那两句话,
愿我的分享可以给大家带来些许的收获
一切能用 Js 实现的,终将都会使用 Js 来实现。

    推荐阅读