预解析

预解析

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 条评论
登录 后参与评论

相关文章

  • 箭头函数

    箭头函数不绑定this关键字,箭头函数中的this,指向的是函数定义位置的上下文this

    清出于兰
  • 初始JavaScript

    1.渲染引擎: 用来解析HTML与CSS,俗称内核,比如chrome浏览器的blink,老 版本的webkit

    清出于兰
  • 关键字和保留字

    包括:break、case、catch、continue、default、delete、do、else、finally、for、function、if、in、i...

    清出于兰
  • python面试

         设计哲学易于学习掌握,小型项目快速开发,大型项目毫无压力,FLask灵活开发,python高手基本都会喜欢flask

    zhang_derek
  • 加倍提升开发效率,继续深挖Lombok的使用

    本篇来接续上一篇文章 这些极简的注解你都清楚吗,主要介绍一下 Lombok 非常用注解。

    cxuan
  • 8.5 指向函数的指针

    1、如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配了一段存储空间,这段存储空间的起始地址(又称入口地址)称为这个函数的指针。

    小林C语言
  • win10下配置linux子系统

    章鱼喵
  • .net下发送Email的Helper类一、适用场景二、代码三、调用方法四、结束

    前段时间因为业务需要自动给客户发送支持HTML格式的而且带附件的Email,而且使用的还是Office365邮箱,就抽时间看了一下这方面的内容,并写了这个帮助类...

    徐大嘴
  • Ubuntu 下安装apache+PHP

    运行如下命令重启:sudo /etc/init.d/apache2 restart

    zhangheng
  • 何一辟谣"被站台""被代投",万事达信用卡使用区块链技术,BTC下跌最大原因是被炒短线?

    最为币圈一姐这几天估计又是累的够呛了,因为市场上屡次出现强行借币安之名到处招摇撞骗,前段时间有媒体报道:币安在马耳他投资电子竞技平台chiliZ,最近这个所谓“...

    区块链领域

扫码关注云+社区

领取腾讯云代金券