博客地址:http://mirroravatar.iteye.com/blog/2182793
出场白:
JavaScript Hoisting,即JavaScript声明提升,包括函数声明提升和变量声明提升。
正文部分:
-
声明的提升,是按作用域来提升的。比如说,函数中的一个变量声明是这样的:
function foo() { console.log(a);//undefined var a = 2; }
这里面的变量a只能提升到函数foo内部的最上方,提升不到foo函数外面的作用域当中,只能是这样的:function foo() { var a; console.log(a); a = 2; }
-
函数声明(Function delaration)能提升,但是函数表达式(Function expression)不能提升,例:
foo(); // not ReferenceError, but TypeError! var foo = function bar() { // ... };
- 遵循函数是“第一公民”(first class)的准则,函数声明提升优先于变量声明提升。直接上例子吧:
foo(); // 1 var foo; function foo() { console.log( 1 ); } foo = function() { console.log( 2 ); };
此例子中,控制台输出的是1,原因是,函数声明提升优先,可以将代码做如下的转换:function foo() { console.log( 1 ); } foo(); // 1 foo = function() { console.log( 2 ); };
值得注意的是var foo不见了,原因也是函数声明提升优先,导致var foo无效,所以var foo 此代码是不编译的。
相关推荐
ECMAscript基础
ECMAScript2021中文最新,ECMAScript2021中文文档,第1-6章,持续更新,喜欢请star。git地址https://github.com/fangniyima/ECMAScript-notes
js 学习必备。 ECMAScript5.1中文版
ECMAScript 6.0的一些基本知识点,let,const,var 的区别;String字符串;Set数据结构,其中文件为markdown格式
Learning ECMAScript 6 Learning ECMAScript 6 Learning ECMAScript 6 Learning ECMAScript 6
ECMAScript Javascript Promise 详解
ECMAScript 基于几种原始技术,最著名的是 JavaScript(Netscape)和 JScript(Microsoft)。该语言由Netscape的Brendan Eich发明,并首次出现在该公司的Navigator 2.0浏览器中。它已经出现在Netscape的所有后续...
此标准定义了 ECMAScript 脚本语言。本节包含对 ECMAScript 语言非规范性的概述。
ecmascript手册,可以通过手册料及基于此规范的语言
ECMAscript 6.0PDF,先说清楚,这是一个需要对js 5.0和用过模块化框架的有一些基础的人,更容易理解
ECMAScript 2018快速入门
ECMAScript语言概述 ECMAScript对象概述(原型链Prototype Chain) ECMA-262主要术语 ECMAScript执行环境(作用域链Scope Chain,闭包机制) ECMAScript函数(new原理) ECMAScript内部属性(参考) ECMAScript执行环境作用...
《ECMAScript 6 入门》是一本开源的 JavaScript 语言教程,全面介绍 ECMAScript 6 新引入的语法特性。 本书覆盖 ES6 与上一个版本 ES5 的所有不同之处,对涉及的语法知识给予详细介绍,并给出大量简洁易懂的示例代码...
ECMAScript 6 入门(第三版)
《ECMAScript 6入门》是一本开源的JavaScript语言教程,全面介绍ECMAScript 6新引入的语法特性。 本书力争覆盖ES6与ES5的所有不同之处,对涉及的语法知识给予详细介绍,并给出大量简洁易懂的示例代码。 本书为中级...
Understanding ECMAScript 6 中文版
ECMAScript的一个安全要求实现
《ECMAScript 6入门》是一本开源的JavaScript语言教程,全面介绍ECMAScript 6新引入的语法特性。
ECMAScript语言规范
ECMAScript全套(ECMAScript5,ECMAScript6,ECMAScript2018)