作用域

什么是作用域

作用域(scope)指的是变量存在的范围,在ES5的规范中,Javascript只有两种作用域:一种是全局作用域,变量在整个程序中一直存在,所有地方都可以读取;另一种是函数作用域,变量只在函数内部存在。

全局变量与局部变量

  • 函数外部声明的变量就是全局变量(global variable),它可以在函数内部读取

var a= 1;
function f() {
console.log(a);
}
f() // 1

  • 在函数内部定义的变量,外部无法读取,称为“局部变量”(local variable)

function f() {
var a = 1;
}
a // ReferenceError: a is not defined

  • 函数内部定义的变量,会在该作用域内覆盖同名全局变量

var a = 1;
function f() {
var a = 2;
console.log(a);
}
f() // 2
a // 1

作用域链

JavaScript上每一个函数执行时,会先在自己创建的AO上找对应属性值。若找不到则往父函数的AO上找,再找不到则再上一层的AO,直到找到大boss:window(全局作用域)。 而这一条形成的“AO链” 就是JavaScript中的作用域链。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 首先,JavaScript确实是一门编译型语言,与C等典型编译型语言相比,区别在于JavaScript的编译过程(...
    环零弦阅读 5,824评论 0 18
  • 1,函数声明和函数表达式有什么区别 1、背景介绍 定义函数的方法主要有三种: 1:函数声明(Function De...
    进击的前端_风笑影阅读 486评论 0 0
  • 一、作用域 一个变量的作用域(scope)是程序源代码中定义的这个变量的区域。 1. 在JS中使用的是词法作用域(...
    挣脱吧小白阅读 491评论 0 0
  • 作用域与作用域链 一、作用域 一个变量的作用域(scope)是程序源代码中定义的这个变量的区域。 在JS中使用的是...
    e81bcd463937阅读 605评论 0 2
  • 函数声明和函数表达式有什么区别? 函数声明和函数表达式是EMACScript规定的两种不同的声明函数的方法。1.函...
    LeeoZz阅读 420评论 0 1

友情链接更多精彩内容