我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Javascript作用域问题是怎样的

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Javascript作用域问题是怎样的

本篇文章为大家展示了Javascript作用域问题是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

在前端学习中,作用域这个问题一直被广泛提起,什么是作用域,什么又是作用域链?在Javascript中,怎么去理解这些概念都是学好这门语言的关键,所以在学习前端开发的过程中,我需要也很有必要去学习和总结下javascript----作用域。

作用域并不难,但是去很少有人能稍微深入的解释什么是作用域,知其然而不知其所以然显然是远远不够的,所以我们就深入浅出一下,

谈到作用域就不得不谈到一个名词----执行环境。什么叫执行环境呢?

执行环境是Javascript中最为重要的一个概念,它定义了变量或函数有权访问其他数据,决定了他们各自的行为。那么在每个执行环境中都有一个叫做“变量对象”的object,执行环境中的所有变量和函数都保存在这个对象中,这个object是无法被访问到了,它只能在后台被javascript解释器访问到。

浏览器在解析Javascript代码的时候会为每个函数创建一个执行环境,并在该执行环境中生成一个变量对象来存储变量和其内部的函数。我们常常用到的window就是最外围的执行环境,也叫全局执行环境,每个执行环境的代码执行完成之后,该环境被销毁,其中的变量对象也将被销毁,而全局执行环境只会在浏览器或网页关闭的时候被销毁,其他的执行环境(或者内部的)则为局部执行环境(函数)。

每个函数都有自己的执行环境,那么当代码的执行流进入到一个函数时,会将该执行环境推入到一个环境栈中,在函数执行完成之后又将其弹出,把对这个执行环境的控制权交还给之前的执行环境,当代码在一个执行环境中执行的时候,会将该环境中的变量对象连入到作用域链中。作用域链的作用就是保证对执行环境中的有权访问的变量和函数有序的访问。说到这里,大家可能有些迷糊啦,那么就用点代码和图片来解释下吧。

//window scope  var name0 = 'scope0'<p>console.log(name0)  //这里可以访问到name0  function scope1(){<p>      var name1 = 'scope1'<p> console.log(name0,name1)  //这里可以访问到name0,name1      function scope2(){          var name2 = 'scope2'<p> console.log(name0,name1,name2) //这里可以访问到name0,name1,name2           function scope3(){              var name3 = 'scope3'<p>console.log(name0,name1,name2,name3) //这里可以访问到name0,name1,name2,name3          }      }  }

当JS解释器去执行这段代码的时候,会生成4个执行环境,分别是window,scope1,scope2,scope3。然后再执行JS代码的时候,会把每个执行环境推入到执行栈中,并生成变量对象给连接到作用域链中(从上到下),***生成的作用域链就为:

window&rarr;scope1&rarr;scope2&rarr;scope3

对于每个执行环境中的变量对象来说,它的作用域链就是它本生加上它之前的变量对象(例如scope2的作用域链就是scope2和它之前的 scope1和window)。我们先前说道,每个执行环境中的变量对象就是该执行环境能够访问到了变量和函数,个人理解为这个函数就是变量对象的作用域 链上其他的变量对象,那么就很好理解了,我们分析下上面代码scope2的变量对象上有哪些东西,首先是参数数组(arguments,这里为[])还有 name2变量,然后是scope1的变量对象和全局变量对象。

说了这么多,提了那么多概念和名词,我们好像只是说到了作用域链,但是并没有说到作用域,这不是扯淡嘛!!!!好吧,我们现在就来谈谈作用域。

还是先来扯下概念吧。是每个执行环境可以通过作用域链向上访问这个他的作用域链的其他执行环境,但是不能向下访问。这个就是作用域啦。

还是拿scope2函数来说吧,他可以访问name2,name1,name0但是不能访问name3,这个就是作用域的限定,他只能访问到 scope1和window的执行环境(还有它本身)。额,就这么一小段,我自己都醉了,但是个人觉得作用域就这点东西,关键的是在与对执行环境、变量对 象和作用域链的理解。这些才是扎实的理解Javascript作用域的关键。

上述内容就是Javascript作用域问题是怎样的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Javascript作用域问题是怎样的

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python作用域的操作步骤是怎样的

本篇文章给大家分享的是有关Python作用域的操作步骤是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。局部,上层,模块,内置python编辑器按照变量定义的位置来确定作用
2023-06-17

怎样理解JavaScript中的变量与作用域

怎样理解JavaScript中的变量与作用域,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、原始值与引用值6种简单数据类型的值都是原始值, 原始值通过变量赋值给另一个变量时,
2023-06-25

selenium怎么处理iframe作用域问题

这篇文章给大家分享的是有关selenium怎么处理iframe作用域问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在使用python进行爬虫操作的过程中,一般为了防止爬虫,会使用iframe,但是由于ifra
2023-06-14

浅谈Nodejs中的作用域问题

在JS中有全局作用域和函数作用域,而在Nodejs中也自己的作用域,分为全局作用域(global)和模块作用域。 js作用域: 以前学js的时候我们的全局对象是window,如:var a = 10; console.log(window.
2022-06-04

Linux操作系统应用领域是怎么样的

本篇文章为大家展示了Linux操作系统应用领域是怎么样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。常用的IT服务器有Linux、Unix和Windows操作系统,其中Linux因其稳定、开源、免
2023-06-05

JavaScript作用域链是什么及怎么使用

这篇文章主要介绍了JavaScript作用域链是什么及怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript作用域链是什么及怎么使用文章都会有所收获,下面我们一起来看看吧。1. 作用域是什么
2023-07-04

编程热搜

目录