JS预解析

  • JS解析器在运行JS代码时分两步: 预解析和代码执行
    预解析
  • JS引擎会把JS里面所有 var 和 function 提升到当前作用域的最前面 代码执行时, 按照代码书写的顺序从上往下执行
  • 预解析分为变量预解析(变量提升) 和 函数预解析(函数提升)
   变量提升, 就是把所有变量声明提升到当前作用域最前面, 不提升赋值操作//坑1相当于var num;console.log(num);num = 10;//坑2相当于//因此采用赋值方式定义函数, 函数调用必须写在函数定义下面var fun;  //声明未给值fun();  //调用未定义函数--报错fun = function() {  //最后才定义console.log(22);}- 函数提升, 就是把所有函数声明提到当前作用域最前面, 不调用函数//坑3相当于function fn() {console.log(22);}fn();//坑2函数采取表达式赋值方式, 不是函数声明, 不能提升

**

栗子

**

        //1.输出结果--undefinedvar num = 10;fun();function fun() {console.log(num);var num = 20;}//相当于执行了以下操作()var num;  //提升num = 10那个 numfunction fun() {var num;  //提升的是num = 20那个 numconsole.log(num);num = 20;}num = 10;fun();
//2.输出结果--undefined, 20
var num = 10;
function fn() {console.log(num);var num = 20;console.log(num);
}
fn();
//相当于以下代码
var num;  //提升num = 10的 num
function fn() {var num;  //提升num = 20的 numconsole.log(num);num = 20;console.log(num);
}
num = 10;
fn();
//3.输出结果--undefined, 9;
var a = 18;
f1();
function f1() {var b = 9;console.log(a);console.log(b);var a = '123';
}
//相当于以下代码
var a;
function f1() {var b;var a;  //此时a = undefined, 就近原则, 待会儿log(a)取此值b = 9;  //b赋值为9console.log(a);console.log(b);a = '123';
}
a = 18;
f1();
//4.(典中典)以下代码
function f1() {//相当于 var = 9; b = 9; c = 9; b 和 c 直接赋值 没有var声明, 当 全局变量 看//集体声明 var a = 9, b = 9, c = 9var a = b = c = 9;console.log(a);console.log(b);console.log(c);
}
f1();
console.log(c);  //全局变量c = 9
console.log(b);  //全局变量b = 9
console.log(a);  //局部变量a, 函数外不能使用

JavaScript预解析详解相关推荐

  1. android Json解析详解(详细代码)

    android Json解析详解(详细代码)   JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当 ...

  2. JSON数据构造及解析详解

    JSON数据构造及解析详解 1.JSON格式数据长啥样? 2.JSON简介 JSON(Javascript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和 ...

  3. javaScript函数模块详解

    javaScript函数模块详解 ​ 函数实际上是对象,每个函数都是Function类型的实例,而Function也有属性和方法,和其他引用类型一样 可以将函数名想象成指针,函数想象成对象 ​ 注意, ...

  4. javascript BOM对象详解

    javascript BOM对象详解 目标:本章节将分为9点详细介绍有关BOM对象的知识点 1.什么是BOM 2.BOM的构成 3.顶级对象window 4.window对象常见事件(页面加载事件和体 ...

  5. JavaScript预解析、作用域题目记录

    JavaScript预解析.作用域题目记录 写出以下题目执行的结果及过程分析 function fun ( n ) {console.log( n );var n = 456;console.log( ...

  6. java bip-39_Java中对XML的解析详解

    先简单说下前三种方式: DOM方式:个人理解类似.net的XmlDocument,解析的时候效率不高,占用内存,不适合大XML的解析: SAX方式:基于事件的解析,当解析到xml的某个部分的时候,会触 ...

  7. JavaScript 运行机制详解(理解同步、异步和事件循环)

    1.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. Java ...

  8. JavaScript(三)—— JavaScript 函数/JavaScript 作用域/JavaScript 预解析/JavaScript 对象

    本篇为 JavaScript 系列笔记第三篇,将陆续更新 JavaScript(一)-- 初识JavaScript/注释/输入输出语句/变量/数据类型 JavaScript(二)-- JavaScri ...

  9. JavaScript 预解析机制

    JavaScript预解析 文章目录 JavaScript预解析 JS预解析? 一.预解析受体 二.对var的预解析 三.对function的预解析 四.var在作用域内 五.function作参.在 ...

最新文章

  1. 【快速入门系列】简述 for...in 和 for...of 区别
  2. 最小树形图及其生产方法
  3. 附下载|Python带你实践机器学习圣经PRML
  4. Windows环境下配置环境变量
  5. windows之2012安装vs2017编译环境失败
  6. MAC电脑安装window系统(一):双系统安装方法
  7. 如何在DNN4下使用VS2005进行单元测试???
  8. php 天气小偷程序,天气小偷程序,自动采集信息入库
  9. Python 面试宝典
  10. python职业发展规划-少走弯路,一个老程序猿谈PHP职业发展规划
  11. VMWARE ESXI 6.5U1离线补丁包升级教程
  12. 怎么做应力应变曲线_如何用Origin画应力应变曲线
  13. ResizeObserver loop completed with undelivered notifications.
  14. 《数据结构》陈越老师课后题详解
  15. 【BP数据预测】基于matlab天牛须算法优化BP神经网络数据预测【含Matlab源码 1316期】
  16. 【angular】@Directive
  17. 全国大学生节能减排社会实践与科技竞赛最新作品模板资料国家一等奖完整申报书说明书ppt
  18. 英文单词缩写规则(转自天涯)
  19. python使用百度aip文字识别
  20. navicat导出和导入数据库里面的数据

热门文章

  1. 求n的阶乘(C语言)
  2. awk入门(三)--getline用法
  3. 时间戳 NSTimeInterval
  4. 中石油将整合中油化建?????
  5. 量化投资常用技能——指标篇2:详解BOLL(布林线)指标,及其代码实现和绘图
  6. 【报告分享】2022中国化妆品行业发展趋势洞察-易观分析(附下载)
  7. 1.3.ARM裸机第三部分-开发板、原理图和数据手册
  8. “use strict“是什么? 使用它有什么优缺点?
  9. 400 bad request
  10. 17.使用CSS完成视差滚动效果?