怎样理解JS的预解析机制
JS的预解析包括两部分:
1. 变量提升
2. 函数声明
对于变量提升, 可以看下下面这块代码
console.log(name); // undefined
var name = "Lilei";
对于函数声明, 可以看下下面这块代码
sayHello(); // "Hello"
function sayHello() {
console.log("Hello");
}
由上面的执行结果, 我们可以知道JS的预解析对变量和函数的行为是不一样的, 对于变量来说, 预解析阶段是不会赋值的, 也就是说: 预解析之于变量, 实际上是在内存中开辟出了变量数量的内存地址; 而预解析之于函数, 则是直接声明.
这也是变量在声明之前使用会返回undefined, 而函数可以正常执行的原因.
怎样理解JS的预解析机制的更多相关文章
- 两个实例轻松理解js函数预解析
		
js函数预解析 例子1: 先上一段代码,看看能不能写出最终的执行结果. console.log(a); var a = 1; console.log(a); function a(){ console ...
 - js的预解析
		
在ES6之前,变量使用var声明,会存在变量的预解析(函数也有预解析).ES6引了let和const,但是现阶段ES6并没有完全普及,而且很多比较老的代码都还是按照ES5的标准甚至是ES3的标准来书写 ...
 - 第06课:作用域、JS预解析机制
		
从字面上理解----域就是空间.范围.区域,作用就是读.写,所以作用域我们可以简单理解为:在什么样空间或者范围内对数据进行什么样的读或写操作. 看一下代码 alert(a); // 为什么是undef ...
 - JS预解析机制
		
JS的预解析过程: 1,预解析 2,再逐行解读代码, 实例: ---------------------------- <script> var name="xm& ...
 - javascript-初级-day06作用域、JS预解析机制
		
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
 - 进击JavaScript核心 --- (2)函数和预解析机制
		
一.函数 每个函数都是 Function类型的实例,也具有属性和方法.由于函数也是一个对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定 1.函数的定义方式 (1).函数声明 fun ...
 - 轻松搞定javascript变量(闭包,预解析机制,变量在内存的分配 )
		
变量: 存储数据的容器 1.声明 var 2.作用域 全局变量. 局部变量. 闭包(相对的全局变量): 3.类型 a.基本类型(undefi ...
 - 深入理解JS引擎的执行机制
		
深入理解JS引擎的执行机制 1.灵魂三问 : JS为什么是单线程的? 为什么需要异步? 单线程又是如何实现异步的呢? 2.JS中的event loop(1) 3.JS中的event loop(2) 4 ...
 - 从var func=function 和 function func()区别谈Javascript的预解析机制
		
var func=function 和 function func()在意义上没有任何不同,但其解释优先级不同:后者会先于同一语句级的其他语句. 即: { var k = xx(); function ...
 
随机推荐
- Js 中那些 隐式转换
			
曾经看到过这样一个代码: (!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]*~+[]]] = sb , 你敢相信, ...
 - JDK1.6历史版本的下载(關於TLSv1.2)Oracle的官方文檔
			
[资源描述]:对于部分老项目 仍然采用的是JDK1.6 版本 但是打开官方 JDK 都是最新的 版本 想找 历史版本 不容易找到 [资源详情]:提供下载链接: http://www.oracle.co ...
 - Windows下使用cmd运行jar文件
			
一般window系统下是不能直接运行jar文件的.(有些电脑可以,记得我以前的电脑是双击jar就可以运行的) 那么如何在windows下运行jar呢? 1.首先,电脑必须配置java运行环境jre-- ...
 - java课后实验性问题4
			
课后作业一: 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象? 设计思路:定义类的构造函数时使静态变量i进行i++,即每构 ...
 - [转][echarts]地图轮播
			
代码片断: 来自:https://blog.csdn.net/qq_36947128/article/details/90899564 function Play(){ chart.dispatchA ...
 - java多线程面试题整理及答案(2019年)
			
1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对 运算密集型任务提速.比如,如果一个线程完 ...
 - 《maven实战》笔记(5)----maven的版本
			
maven中构件和项目都有自己的版本,其中分为稳定的发布版本和不稳定的快照版本. 1.0.0.1.3-alpha-4和2.0就是稳定版本,而2.1-SNAPSHOT和2.1-20091214.2214 ...
 - SQL-W3School-高级:SQL 约束(Contraints)
			
ylbtech-SQL-W3School-高级:SQL 约束(Contraints) 1.返回顶部 1. SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE T ...
 - 轻量级通用上采样算子-CARAFE
			
转载:https://zhuanlan.zhihu.com/p/76063768 前言 这篇论文被 ICCV 2019 接收为 oral presentation.之前我们主要研究物体检测(例如 Hy ...
 - TreeView如何实现选中的节点上移或下移 [问题点数:20分,结帖人nww2002]
			
在TreeView中,如何实现选中一节点,右键点击上移或下移 TTreeNode.MoveTo() 一.获得Tree上的结点var NowNode : TTreeNode;begin NowNode ...