博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js函数的执行环境和作用域链
阅读量:3932 次
发布时间:2019-05-23

本文共 874 字,大约阅读时间需要 2 分钟。

执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为

执行环境分为:全局环境局部环境

1、使用var声明的变量会自动被添加到最接近的环境中,在函数内部,最接近的环境就是函数的局部环境,在with语句中,最接近的环境是函数环境

如果初始化的变量没有用var声明,该变量会自动被添加到全局环境中

2、某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁,而全局环境直到应用程序退出(关闭网页)时才会被销毁

代码如下:

结果图:

解释:因为在函数add内部,使用var声明了一个初始化变量sum,所以该变量sum会被添加到最接近的环境中—函数add的局部环境,所以在函数add执行完之后,变量sum会被销毁,因此输出时会报错


代码如下:

结果图:

解释:整个代码跟第一个案例相比,只是没有使用var声明sum,在该案例中,函数add中的初始化变量sum没有使用var声明,因此,初始化变量sum会被添加到全局环境中


作用域,当代码在一个环境中执行的时候,会创建变量对象的一个作用域,作用域的用途是保证对执行环境有权访问的所有变量和函数的有序访问

代码如下:

结果:输出什么颜色不重要,重要的是能不能正常的输出值,如果在全局环境中输出anotherColor,会报错,anotherColor is not defined

解释:

1、以上代码共涉及3个执行环境全局环境changeColor的局部环境swapColor的局部环境

全局环境无权访问changeColor的局部环境和swapColor的局部环境

而swapColor的局部环境可以访问其他两个环境,因为那两个环境是它的父执行环境

2、内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任意变量和函数
3、每个环境都可以向上搜索作用域链,以查询变量和函数名,但任何环境都不能通过向下搜索作用域链而进入另一个执行环境
 

可以看下图:

 

                                                      -----本文摘自《JavaScript高级程序设计》

个人学习记录,仅供参考

 

 

 

 

 

 

转载地址:http://ukxgn.baihongyu.com/

你可能感兴趣的文章
python+opencv礼帽黑帽
查看>>
python链表反转
查看>>
c/c++查询M个数在N数组中出现的次数
查看>>
uva 147 - Dollars(动态规划--完全背包)
查看>>
uva 357 - Let Me Count The Ways(动态规划-注意dp初始化的问题)
查看>>
uva 562 - Dividing coins(注意判断条件,可以转换成01背包做)
查看>>
uva 10404 - Bachet's Game(DP)
查看>>
最优二叉搜索树
查看>>
hdu 1008 Elevator
查看>>
hdu 1005 Number Sequence(数学题目,好好看)
查看>>
zoj 2106 Tick and Tick(比较好的数学题目,代码特麻烦,注意精度)
查看>>
zoj 2107 Quoit Design(最近点对问题,好好思考,分治)
查看>>
zoj 2111 Starship Troopers(树形DP)
查看>>
vector 容器的使用方法
查看>>
hdu 1520 Anniversary party(基本树形DP)
查看>>
fzu Problem 2138 久违的月赛之一
查看>>
poj 1947 Rebuilding Roads(树形DP)
查看>>
zoj 3626 Treasure Hunt I(树形DP+分组背包)
查看>>
poj 1655 Balancing Act(树形DP,删点)
查看>>
hdu 1754 I Hate It(线段树,单点替换,求区间最值)
查看>>