预解析

1.预解析的相关概念

JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的。JavaScript 解析器在运行 JavaScript 代码的时候分为两步:预解析和代码执行。

  • 预解析:在当前作用域下, JS 代码执行之前,浏览器会默认把带有 var 和 function 声明的变量在内存中进行提前声明或者定义。
  • 代码执行: 从上到下执行JS语句。 预解析会把变量和函数的声明在代码执行之前执行完成。

2. 变量预解析

预解析也叫做变量、函数提升。
变量提升(变量预解析): 变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升。
console.log(num);  // 结果是多少?
var num = 10;      // ?
结果:undefined
​
注意:**变量提升只提升声明,不提升赋值**

3. 函数预解析

函数提升: 函数的声明会被提升到当前作用域的最上面,但是不会调用函数。
fn();
function fn() {
    console.log('打印');
}
结果:控制台打印字符串 --- ”打印“ 
​
注意:函数声明代表函数整体,所以函数提升后,函数名代表整个函数,但是函数并没有被调用!

4. 函数表达式声明函数问题

函数表达式创建函数,会执行变量提升,此时接收函数的变量名无法正确的调用:

fn();
var  fn = function() {
    console.log('想不到吧');
}

结果:报错提示 ”fn is not a function"

解释:该段代码执行之前,会做变量声明提升,fn在提升之后的值是undefined;而fn调用是在fn被赋值为函数体之前,此时fn的值是undefined,所以无法正确调用

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 函数的定义和调用

    星辰_大海
  • 函数

    在 JS 里面,可能会定义非常多的相同代码或者功能相似的代码,这些代码可能需要大量重复使用。

    星辰_大海
  • 严格模式

    JavaScript 除了提供正常模式外,还提供了严格模式(strict mode)。ES5 的严格模式是采用具有限制性 JavaScript变体的一种方式,即...

    星辰_大海
  • JavaScript

    注释问题:单行,多行,方法注释等..... 快捷键:ctrl+/ 和ctrl+shift+/

    用户4158112
  • 【Elastic】SpringBoot快速集成ES

    使用配置类配置,可以参考如下所示:先创建一个builder,用于初始化ES client

    程序员小明
  • Lombok 使用小结

    Lombok 简介 Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注释...

    静默虚空
  • lombok使用基础教程

    前言 lombok是一个编译级别的插件,它可以在项目编译的时候生成一些代码。在很多工具类的项目中都有这个功能。比如dagger。 通俗的说,lombok可以通过...

    Ryan-Miao
  • 设计模式:抽象工厂方法模式

    今天说一下抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道实...

    lpxxn
  • JAVA设计模式之抽象工厂模式

    前面已经介绍过简单工厂模式和工厂方法模式,这里继续介绍第三种工厂模式-抽象工厂模式,还是以汽车的制造为例。

    秃头哥编程
  • 设计模式—— 九 :抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是一种比较常用的模式,其定义如下:

    三分恶

扫码关注云+社区

领取腾讯云代金券