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 来实现。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容