ES5中js的作用域和变量提升

ES5中js的作用域和变量提升

ES5 中JS 的作用域:

在ES5 中,JS 只有两种形式的作用域:全局作用域和函数作用域。

全局作用域

全局对象的作用域,任何地方都可以访问到(如果没有被函数作用域覆盖)。

函数作用域

整个函数的范围内可访问。

变量提升:

ES5 中存在变量提升,ES6 中并不存在变量提升。因此下面的内容只针对ES5。

ES5 中变量声明会提升到它所在 作用域的顶端 去执行。

以下两段示例代码是一样的结果:
代码1:

a = 5; // 变量 a 设置值为 5
console.log(a);
var a; // 声明 a

代码2:

var b; // 声明 b
b = 5; // 变量 b 设置值为 5
console.log(b);

函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。
但是需要注意的是:被初始化的变量不会提升
以下两段示例代码是不一样的结果:
代码1:

var x = 5; // 初始化 x
console.log(x + y);//12
var y = 7; // 初始化 y

代码2:

var x = 5; // 初始化 x
console.log(x + y);//NaN
var y = 7; // 初始化 y

扩展:

console.log(v1);
var v1 = 100;
function foo() {
    console.log(v1);
    var v1 = 200;
    console.log(v1);
}
foo();

console.log(v1);

打印结果为:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简介 ECMAScript是JavaScript的标准,JavaScript实现了ECMAScript,ECMAS...
    Zindex阅读 516评论 0 1
  • 原本想稍微整理一下 ES 新特性,没想到花了相当多的时间,本文也巨长,依然推荐使用 简悦[https://gith...
    401阅读 1,949评论 0 5
  • html 1.1 html标签的类型(head, body,!Doctype) 他们的作用是什么 参考答案: !D...
    _Y_X_阅读 633评论 0 1
  • https://www.jianshu.com/p/769266edbd38 前言 经过艰苦卓绝的面试历程,终于拿...
    Clover园阅读 237评论 0 0
  • 一、作用域 JavaScript中最为重要的⼀个概念:执⾏环境(作用域),定义了变量或函数有权访问的其他数据,决...
    慜溢学阅读 244评论 0 0