Javascript 的变量提升与预解析】的更多相关文章

一.什么是变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分 二.怎么实现变量提升 Js 运行前有一个预编译的过程,预编译完成后,在一步步执行.那么在预编译的过程中,会执行三个动作: 1.分析参数, 2.分析变量声明, 3.分析函数声明. 具体步骤如下: 1.函数在运行的瞬间,生成一个活动对象(Active Object),简称 AO 2.分析参数 函数先接收形参,添加到…
网上找了两个经典的例子 var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); // 10 var a = 1; function b() { a = 10; return; function a() {} } b(); alert(a);// 1 在JavaScript中,函数.变量的声明都会被提升(hoisting)到该函数或变量所在的scope的顶部.即--JavaScript的变量提升.…
变量提升 JavaScript的变量提升有两种,用var声明的变量以及用function声明的变量. 用var声明的变量 我们先来看下面这段代码,a的值是多少 代码1 console.log(a); var a; 按照以往编程语言的思路来看,代码自上而下运行,按这种思路,会报错,因为执行到第2行时,变量a还没有定义,所以会报错a is not defined 然而事实上答案是undefined 好,抱着疑惑,我们看下面的代码 var a; console.log(a); 我们发现,这两段代码是一…
第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函数提升 3. 为什么要进行提升 4. 最佳实践 那么,我们就开始进入主题吧. 1. 变量提升 通常JS引擎会在正式执行之前先进行一次预编译,在这个过程中,首先将变量声明及函数声明提升至当前作用域的顶端,然后进行接下来的处理.(注:当前流行的JS引擎大都对源码进行了编译,由于引擎的不同,编译形式也会有…
函数: 即function语句的集合,就是将多个语句封装到一起: 函数的执行要会自己遍历,遇见函数 a():执行语句,就要移交控制权,函数执行完毕之后,控制权又移交回来了! 函数的参数要罗列在function定义的圆括号内sum(a,b),用逗号隔开,叫做形式参数,调用的时候,圆括号里面是实际参数sum(1,2),参数在JS中不用指定类型,调用的时候参数个数也可以和定义的时候不一样. 1 //函数的参数和返回值 2 function sum(a,b){ 3 return a + b; 4 ale…
声明(创建) JavaScript 变量 在 JavaScript 中创建变量通常称为"声明"变量. 一.我们使用 var 关键词来声明变量: var carname; 变量声明之后,该变量是空的,其值实际上是 undefined. 如需向变量赋值,请使用等号: carname="Volvo"; 不过,您也可以在声明变量时对其赋值: var carname="Volvo"; 当使用var声明一个变量时,创建的这个属性是不可配置的,也就是说无法通过…
首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确.因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升(Hoisting). JS 存在变量提升,这个的设计其实是低劣的,或者是语言实现时的一个副作用.它允许变量不声明就可以访问,或声明在后使用在前.新手对于此则很迷惑,甚至许多使用JS多年老手也比较迷惑.但在 ES6 加入 let/const 后,变量Hoisting 就不存在了. 一. 变量未声明,直…
在JavaScript中,var变量具有函数级作用域,而且是整个函数作用域.为什么会是整个函数作用域呢?因为var变量具有变量(声明)提升功能,能将变量声明隐式的提升到函数体的顶部.这样做的一个好处就是可以将重复的变量声明合并成一个,减少内存分配数量.但是,如果不知道变量提升的话,很可能出现一些意想不到的BUG.举例如下: var n = 1; function f() { console.log(n); var n = 2; } f(); 执行该代码,输出的结果不是1,而是undefined.…
1. 看人家举的两个例子,我认为这里的判断是否定义: !var 其实就是 指是否在函数function里面定义了.只有在funciton里面定义了了,js才hoist到最上面去找这个变量的值,否则就按照你自己在函数里定义的规则来了. [转载请注明来自: http://blog.csdn.NET/sunxing007] 下面的程序是什么结果? var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar();…
原谅链接:http://www.cnblogs.com/damonlan/archive/2012/07/01/2553425.html 因为这个问题很是经典,而且容易出错,所以在介绍一次.哈哈.莫怪哦. 一.案发现场 我们先看一段很简单的代码: var v='Hello World'; alert(v); 这个没有疑问吧,弹出“Hello World”.OK,我们继续. 我们在看一段Code: var v='Hello World'; (function(){ alert(v); })() 经…