前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >JavaScript笔记(6)

JavaScript笔记(6)

作者头像
y191024
发布2022-09-20 20:06:15
发布2022-09-20 20:06:15
2060
举报

JavaScript预解析

假如我们直接log一个num,那么结果肯定是报错,not defined,因为变量既没有声明也没有赋值

1.那如果我们先使用,再声明赋值呢?

得到的结果却是undefined.

2.如果我们在一个函数声明之前调用,会有什么结果呢?

是没有问题的.

3.我们之前还学习了匿名函数,那么先调用再声明,结果和上面一样吗?

结果是报错的.

这是为什么呢?这就引出了我们接下来要学习的:预解析

预解析

JavaScript代码是由浏览器中的JavaScript解析器来执行的,JavaScript解析器在运行JavaScript代码的时候分成两步:1.预解析 2.代码执行

  • 预解析: JS引擎会把JS里面所有的var和function提升到当前作用域最前面.预解析分为变量预解析(变量提升)和函数预解析(函数提升)
    • 变量提升:就是把所有的变量声明提升到当前的作用域最前面,不提升赋值操作.
    • 函数提升:就是把所有的函数声明提升到当前的作用域最前面,不调用函数.
  • 代码执行:按照代码手写的顺序从上往下执行.

这样就能解释刚刚我们上面的问题1:

将声明提前(var num),所以只声明没赋值,自然是undefined.

问题2:

将声明提升,而且不调用函数.

问题3也可以解决:

现在做一个案例

根据预解析的原理,变量和函数都要提升:

所以最后的结果为undefined.

现在我们再来看一道比较坑的题目:

原本是这样的:

先将函数声明提前

但是尤其注意这步是个坑!

如果想要集体声明,那应该是 var a = 9, b = 9, c= 9,而不是上面这种写法,上面的写法中,b和c都是没赋值,直接声明,前面我们学习过,在函数中不用赋值直接声明的是全局变量.

所以最后的结果是:

在函数外部的console.log(a)处报错,因为a = 9是局部变量.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 睡不着所以学编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档