美文网首页
2018-04-11

2018-04-11

作者: 小明阿李 | 来源:发表于2018-04-11 23:09 被阅读0次

JavaScript作用域链浅析

1、作用域

作用域指的是变量存在的范围。在ES5规范中,JavaScript只有两种作用域:

  • 全局作用域,变量在整个程序中始终存在,所有地方均可读取;
  • 函数作用域,变量只在函数内部存在。

函数外部声明的变量就是“全局变量”,可以在函数内部读取;


在函数内部定义的变量称为“局部变量”,外部不能读取。


函数内部的局部变量会覆盖同名全局变量。


2、作用域链

当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。
我们来看下面这段代码:

  var a = 2
  function fn1(){
    console.log(a);
  }
fn1();

当某个函数第一次被调用时,就会创建一个执行环境(execution context)以及相应的作用域链。当调用fn1()时的作用域链如下:

  • 函数在执行的过程中,先从自己内部找变量
  • 如果找不到,再从创建当前函数所在的作用域去找, 以此往上

可以看到fn1内没有变量a,于是沿着作用域链向后寻找,最后找到全局变量a,所以返回了全局变量a的值。

标识符解析是沿着作用域链一级一级地搜索标识符地过程。搜索过程始终从作用域链地前端开始,然后逐级向后回溯,直到找到标识符为止(如果找不到标识符,通常会导致错误发生)—-《JavaScript高级程序设计》

本文仅为自已当前学习的简单理解,如需深入了解请参考其它文章。


参考:
http://javascript.ruanyifeng.com/grammar/function.html#toc11
https://blog.csdn.net/whd526/article/details/70990994

相关文章

  • 纯粹

    /** * @Author liguo * @Description * @Data 2018-04-11 */ ...

  • mysql错误集锦

    2018-04-11:环境:linux+wdcp+phpservice mysqld status 报错“ERRO...

  • 用户中心

    layout: "post"title: "用户中心"date: "2018-04-11 18:12" 用户中心 ...

  • 用户信息

    layout: "post"title: "用户模块"date: "2018-04-11 09:02" 用户系统 ...

  • 梵塔网络Penta .vs. 本体网络Ontology

    2018-04-11 Penta CEO David Ritter:首创DSC共识算法,突破公链掣肘 4月10日,...

  • 2018-04-11

    2018-04-11 180 戴师傅 简书作者 2018.04.11 21:10 打开App (稻盛哲学学习会)打...

  • 192G147号沈家芬8/4-15/4周检视

    2018-04-11 23:15 · 字数 914 · 阅读 2 · 让生命灿烂如花 没有反思的人生不值得过! ...

  • 孩子的感动

    2018-04-11 星期三 晴 今天,孩子有跟我说起学校里的事情。同学之间嬉戏,他被人说哭了(真是没出...

  • 春日巧遇故人

    春日巧遇故人 新绿层重,新花沐风。 春雨道上,旧人新逢。 xxx YBY 汉城湖的诗韵2018-04-11 Sta...

  • 网络强文~装傻!高人也。

    做人的最高境界:装傻! 来源:2018-04-11 美篇 你骗了我,我仍然相信你, 这是智慧。 你为我捧场,我为你...

网友评论

      本文标题:2018-04-11

      本文链接:https://www.haomeiwen.com/subject/nlctkftx.html