博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 变量提升
阅读量:7049 次
发布时间:2019-06-28

本文共 1314 字,大约阅读时间需要 4 分钟。

变量提升(Hoisting):在ES6之前,函数声明变量声明总是被JavaScript解释器隐式地提升(hoist)到包含他们的作用域的最顶端。

注意: 1. JavaScript 仅提升声明,而不提升初始化。2. ES6 中不存在变量提升的概念。

1. 变量提升

变量未声明:

function fn () {    console.log(name);}fn(); // 报错: ReferenceError: name is not defined

变量在使用后声明:

function fn () {    console.log(name);; // undefined    var name;}fn();

变量在使用后声明并初始化:

function fn () {    console.log(name);; // undefined    var name = 'cedric';}fn();

上面函数等效于下面:

function fn () {    var name;    console.log(name);; // undefined    name = 'cedric';}fn();

2. 函数表达式的提升

function fn () {    console.log(fn2);; // undefined    console.log(fn2());; // 报错  Error: fn2 is not a function    var fn2 = function() { };}fn ();

可见,在一个函数表达式声明前,可以访问其函数名,但是调用此函数会报错!!

3. 函数声明的提升

function fn () {     console.log(fn2); // fn2() {console.log('console in fn2');}     fn2(); // console in fn2    function fn2() {         console.log('console in fn2');    };}fn ();

在函数声明前,既可以访问函数名,也可以调用此函数。

4. 易错

var a = 1;function fn() {    console.log( a);  // undefined    var a = 2;}fn();
var a = 1;function fn() {    console.log( a);  // 1    a = 2;}fn();
var a = 1;function fn() {    if (!a) {        var a = 2;    }    console.log( a);  // 2}fn();
var a = 1;function fn() {    if (!a) {        a = 2;    }    console.log( a);  // 1}fn();

转载于:https://www.cnblogs.com/cckui/p/10032698.html

你可能感兴趣的文章
NS 2.35 柯志亨书-实验4笔记-随机数产生-参数化批处理
查看>>
ios 导航问题
查看>>
[Android学习笔记]使用getIdentifier()获取资源Id
查看>>
Vim与Python真乃天作之合
查看>>
阅读《移山之道》及讲义感想
查看>>
css3实现好看的边框效果
查看>>
Difference Between 2 Dates or 2 Times
查看>>
python练习-简单小爬虫
查看>>
python进阶-面向对象编程五:类的内置方法
查看>>
JAVA入门到精通-第52讲-面试题讲评
查看>>
springboot的热部署和dubug
查看>>
第一次写博客
查看>>
java 桌面程序打包 EXE4J
查看>>
05-spark streaming & kafka
查看>>
python杂记
查看>>
Touch基本
查看>>
【uva】1220 Party at Hali-Bula
查看>>
cd 简化命令
查看>>
《JAVA NIO》Channel
查看>>
实验6
查看>>