浅谈JavaScript代码预解析

栏目: JavaScript · 发布时间: 7年前

内容简介:最近与同学交流关于js代码预解析的问题,想想自己当时学的时候也没有太过注意这个事,所以特意研究了一下,如有不正确的地方敬请各位指教。为了便于理解,文中部分用可能不够准确,请大家多包涵。

最近与同学交流关于js代码预解析的问题,想想自己当时学的时候也没有太过注意这个事,所以特意研究了一下,如有不正确的地方敬请各位指教。为了便于理解,文中部分用可能不够准确,请大家多包涵。

知识点

  • var 声明的变量在预解析的时候只执行声明,不会执行定义,默认值是 undefined
  • function 声明的函数在预解析的时候会提前声明并且会同时定义。
  • 变量名重复声明无效
  • 预解析过得代码不会再执行阶段执行

示例一

console.log(a);  // 打印函数a函数体(function a() { console.log('a') })

var a = 10;

console.log(a);  // 10

function a() { console.log('a') }

console.log(a);  // 10
复制代码

预解析过程

  1. 首先预解析到有变量 a 存在,因此记录下 a 这个名字,和其值 undefined
  2. 接着预解析到有函数 a 声明,记录下函数名 a
  3. 但是发现已经记录了一个 a ,因此该操作无效,将函数体与 a 这个名字相关联
  4. 解析完毕

预解析过程代码

a = undefined
a = function () { console.log('a') }

预解析结果

  1. a = function () { console.log('a') }

执行过程

  1. 打印变量 a 的值 function a() { console.log('a') }
  2. 变量 a 赋值为10,将原来关联的函数覆盖
  3. 打印变量 a 的值 10
  4. 打印变量 a 的值 10
  5. 执行完毕

执行过程代码

console.log(a)
a = 10
console.log(a)
console.log(a)

示例二

console.log(fn)  // 函数fn函数体(function fn() { console.log(2) })

function fn() { console.log(1) }

console.log(fn)  // 函数fn函数体(function fn() { console.log(2) })

var fn = 10    

console.log(fn)  // 10

function fn() { console.log(2) }   

console.log(fn)  // 10
复制代码

预解析过程

  1. 首先预解析到有函数 fn 声明,因此记录 fn 这个名字,并关联其函数体
  2. 接着预解析到变量 fn 声明,记录下变量名 fn
  3. 但是发现已经记录了一个 fn ,因此该操作无效
  4. 接着预解析到有函数 fn 声明,因此记录 fn 这个名字
  5. 但是发现已经记录了一个 fn ,因此该操作无效,接着关联其函数体
  6. 解析完毕

预解析过程代码

fn = function () { console.log(1) }
fn = function () { console.log(2) }

预解析结果

  1. fn = function () { console.log(2) }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ext JS源码分析与开发实例宝典

Ext JS源码分析与开发实例宝典

彭仁夔 / 电子工业出版社 / 2010-1 / 78.00元

《Ext JS源码分析与开发实例宝典》从Ext JS实现的基本功能开始讲解,从两个方面对Ext JS进行整体上的概述,让读者从宏观上去把握ExtJS框架。接下来讲解Ext JS核心基础知识,包括事件机制、模板模型、数据模型以及对类、函数、字符串、日期、数组及定时任务这6个类进行扩展。然后讲解Ext JS基于元素的开发,包括动画特效和拖曳实现等。最后深入讲解组件的开发,对布局、模型及4大组件一一进行......一起来看看 《Ext JS源码分析与开发实例宝典》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具