typeof、摇树优化、js预编译

typeof:

   typeof用以获取一个变量或者表达式的类型,一元运算符

  • null:空、无。表示不存在,当为对象的属性赋值为null,表示删除该属性
  • undefined:未定义。当声明变量却没有赋值时会显示该值。可以为变量赋值为undefined
  • number:数值。最原始的数据类型,表达式计算的载体
  • string:字符串。最抽象的数据类型,信息传播的载体
  • boolean:布尔值。最机械的数据类型,逻辑运算的载体
  • object:对象。面向对象的基础

  注意:没有数组,因为type数组时结果是object

  

js预编译:

  脚本执行js引擎执行步骤:

  1. 语法分析
  2. 预编译
  3. 解释执行

  语法分析:引擎检查你的代码有没有什么低级的语法错误

  预编译:在内存中开辟一些空间,存放一些变量与函数 
  解释执行:顾名思义便是执行代码了  

  预编译(函数执行前)※ 
  1. 创建AO对象(Active Object) 
  2. 查找函数形参及函数内变量声明,形参名及变量名作为AO对象的属性,值为undefined 
  3. 实参形参相统一,实参值赋给形参 
  4. 查找函数声明,函数名作为AO对象的属性,值为函数引用

  预编译(脚本代码块script执行前) 
  1. 查找全局变量声明(包括隐式全局变量声明,省略var声明),变量名作全局对象的属性,值为undefined 
  3. 查找函数声明,函数名作为全局对象的属性,值为函数引用

时间: 2024-10-24 09:28:15

typeof、摇树优化、js预编译的相关文章

js预编译

先来做三个测试 eg1: 1 var a; 2 a = 1; 3 4 function a() {}; 5 console.log(a); eg2: 1 var a; 2 function a() {}; 3 console.log(a); eg3: 1 var a; 2 function a() {}; 3 a = 1; 4 console.log(a); eg1:输出1   eg2:输出a方法   eg3:输出1 为什么输出结果是这样的? 先来看看js预编译实现过程: 1.js首先扫描var

Handlebars.js 预编译(转)

Handlebars.js 官网上对预编译1是这样说的: 你需要安装 Node.js 你需要在全局环境中,通过 Npm 安装 handlebars 包 然后你就可以通过命令预编译你的 handlebars 模板文件: $ handlebars <input> --output <output> 假设我有一个模板文件,名称为 person.handlebars,内容很简单,如下: <table> <tr> <td>This is {{firstna

Js 预编译

开始 所有的测试,都是chrome浏览器. js本身是脚本语言,可以不经过编译直接运行,但是在进入每一个<script>标签,或者js文件的时候,这样的情况下,浏览器会给js一个预编译的过程. 这样就有必要讨论一下预编译了. 解析的状态是首先引入一个代码段,也就是之前提到的标签或者文件.读入整个代码段,进行解析,解析的方式是遇到变量就声明, 对变量声明为undefined,对函数做标记,这个就是预解析,但是如果声明了同名的函数,使用最后一个.变量都是undefied,只有触发的时候,才会激活.

Android首次启动时间长优化之预编译提取Odex

提示!应用程序的安装有两种情况,第一:首次启动系统时安装:第二:系统启动完成后安装.本篇博文基于第一种安装场景.在系统首次启动的场景中,系统会对/system/app./system/priv-app./data/app目录下的所有APK进行dex字节码到本地机器码的翻译,同样也会对/system/framework目录下的APK或者JAR文件,以及这些APK所引用的外部JAR,进行dex字节码到本地机器码的翻译.这样可以保证除了应用之外,系统中使用Java来开发的系统服务,也会统一地从dex字

关于js预编译以及js文件执行顺序的几个问题。

关于js的执行原理,除去html页面中直接添加的代码,js代码的放置可以分为两类. //情形a           <script type="text/javascript" src="xxx.js"$amp;>amp;$lt;/script>           //情形b            <script type="text/javascript">           code......       

JS预编译 ---2018.6.22

1.a标签有特点是  在podding和margin情况下不能撑开 2.今天学习了JS的预编译感觉贼迷糊,先听课后面多做练习解决问题: 创建ao对象; 找形参和变量声明,将变量名和形参名作为AO属性名,值为undefined; 将参考值和形参统一; 在函数体里面找函数声明,赋值于函数体. 原文地址:https://www.cnblogs.com/zs-xanadu/p/9215739.html

js 预编译环节的变量提升

有些东西需要先告诉你怎么用,再去理解定义 关于变量的提升 function test () { console.log(a) var a = 100 console.log(a) }; test () // undefined // 100 执行步骤 function test () { var a = undefined console.log(a) a = 100 console.log(a) } 关于函数的提升 function test () { console.log(a) funct

js预编译和函数执行

javascript 执行过程 1.语法检测(有没有基本的语法错误,例如中文,关键字错误...)2.词法分析(预编译) (1)创建全局GO(global object)对象 (2)对var声明的变量进行声明提升但不赋值,放入GO对象中 (3)对函数体整体进行提升,放入GO对象中 3.逐行执行 一.全局 直接是script标签中的代码,不包括函数执行 <script type="text/javascript"> console.log(a); var a = 100; co

js预编译环节 变量声明提升 函数声明整体提升

预编译四部曲 1.创建AO对象 2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined 3.将实参和形参统一 4.在函数体里面找函数声明,值赋予函数体 function fn(a){ console.log(a) //function a(){} var a = 123; console.log(a)//123 function a(){} console.log(a)//123 var b = function(){} console.log(b) //function()