文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

Javascript作用域问题是怎样的

2024-04-02 19:55

关注

本篇文章为大家展示了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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯