作用域及作用域链

简介: 作用域及作用域链

作用域是什么?

作用域就是变量与函数的可访问范围


作用域链又是什么呢?


讲作用域链之前,我们首先要讲一下变量是怎么查找的。


var name = 'window.name';
function foo(){
  var name = 'foo.name';
  console.log(name);
}
function bar(){
  console.log(name);
}
foo(); // foo.name
bar(); // window.name复制代码


变量查找的时候,会先从当前执行上下文中查找该变量,如果未找到,就会去父级执行上下文中查找,直到全局执行上下文(如果对于执行上下文不理解,可以看我之前的一篇文章《执行上下文和执行栈》),而变量这种查找的规则就形成了作用域链


但是需要注意的是,我之前的文章讲过


执行上下文的创建阶段:确定this及作用域链,声明函数并初始化,声明变量并赋予默认值undefined,创建arguments对象


接下来看一个例子:


let name = 'window.name';
function foo(){
  console.log(name);
}
function bar(){
  let name = 'bar.name';
  foo();
}
bar(); // window.name
复制代码


所以写代码的时候不要被自己绕晕了


如果有错误或者不严谨的地方,请给予指正,十分感谢!

相关文章
|
7月前
|
JavaScript 前端开发
作用域链的理解
作用域链的理解
64 0
|
2月前
|
JavaScript 前端开发
作用域和作用域链及预解析
作用域和作用域链及预解析
26 4
|
3月前
|
Java
作用域
作用域
24 2
|
3月前
C 作用域详解
在 C 语言中,作用域决定了变量和函数的可见性和生命周期,包括块作用域、函数作用域、文件作用域和全局作用域。块作用域内的变量仅在块内有效,函数作用域内的变量在整个函数内有效,文件作用域内的全局变量和函数在整个文件内有效,而全局作用域内的变量和函数在整个程序运行期间有效。作用域的优先级遵循局部变量优先的原则,局部变量会遮蔽同名的全局变量。变量的生命周期分为局部变量(函数调用时创建和销毁)、全局变量(程序开始时创建和结束时销毁)以及静态变量(整个程序期间有效)。理解作用域有助于避免命名冲突和错误,提高代码的可读性和可维护性。
|
7月前
|
自然语言处理 JavaScript 前端开发
深入理解作用域、作用域链和闭包
在 JavaScript 中,作用域是指变量在代码中可访问的范围。理解 JavaScript 的作用域和作用域链对于编写高质量的代码至关重要。本文将详细介绍 JavaScript 中的词法作用域、作用域链和闭包的概念,并探讨它们在实际开发中的应用场景。
|
7月前
|
自然语言处理 JavaScript 前端开发
对作用域链的理解
对作用域链的理解
61 0
|
设计模式 自然语言处理 JavaScript
一篇文章帮你真正理解javascsript作用域闭包
一篇文章帮你真正理解javascsript作用域闭包
92 0
|
存储 缓存 JavaScript
深入理解作用域和闭包(下)
深入理解作用域和闭包(下)
深入理解作用域和闭包(下)
|
存储 JavaScript 前端开发
深入理解作用域和闭包(上)
深入理解作用域和闭包(上)
深入理解作用域和闭包(上)
|
自然语言处理 JavaScript 前端开发
作用域是什么
作用域是什么
128 0