2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > JavaScript变量作用域和内存问题(二)【HTML】

JavaScript变量作用域和内存问题(二)【HTML】

时间:2020-05-09 11:00:01

相关推荐

JavaScript变量作用域和内存问题(二)【HTML】

web前端|html教程

JavaScript变量作用域和内存问题(二)

web前端-html教程

执行环境是js中特别重要的概念,是指变量或者函数可以访问其他数据,定义自己的行为。每个执行环境都有一个与之相对应的变量对象,执行环境中定义的所有变量和函数都保存在这个变量中,我们看不到这个变量,但是后台可以看到。

全局变量的执行环境是最外围的执行环境,在web浏览器中,全局执行环境就是window对象,所以所有的函数和全局变量都可以作为window对象的一个属性。其他执行环境都是在函数和变量执行完毕后销毁内存,变量和函数也随之销毁,而全局变量也是在关闭页面或浏览器的时候销毁。

“ 当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain)。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终都是当前执行的代码所在环境的变量对象。如果这个环境是函数,则将其活动对象(activation object)作为变量对象。活动对象在最开始时只包含一个变量,即arguments对象(这个对象在全局环境中是不存在的)。作用域链中的下一个变量对象来自包含(外部)环境,而再下一个变量对象则来自下一个包含环境。这样,一直延续到全局执行环境;全局执行环境的变量对象始终都是作用域链中的最后一个对象。 ”

我们可以得出很多特别重要的信息,作用域链的作用,是保证对执行环境所有变量和函数有序访问,这个有序体现在,作用域链的最前端是arguement对象,而最后端是全局执行环境的window对象。看下面这个例子:

微信付费入群php源码,vscode写Scala,什么是ubuntu core,32位 tomcat,2.1sqlite,shopex 团购插件,前端框架重要性,爬虫文献摘要,php 运算符,seo博客优化方法,志愿服务网站源码下载,好看的手机网页动画,移动端html5下载模板,小说页面源码,投诉管理系统 php,微信小程序查询功能源码lzw

var color = "blue";function changeColor(){ var anotherColor = "red"; function swapColors(){ var tempColor = anotherColor; anotherColor = color; color = tempColor; // 这里可以访问color、anotherColor和tempColor } // 这里可以访问color和anotherColor,但不能访问tempColor swapColors();}// 这里只能访问colorchangeColor();

维修统计 源码,vscode下载插件失败,ubuntu ln -r,tomcat集群在哪,sqlite测试代码数量,爬虫知道转发最高的微博,广告联盟源码php,什么行业网站seo,阿莫网站,php动态修改网页title,模板免费下载lzw

拼多多网站源码微信付款,Ubuntu卡死的解决,大数据爬虫组,payment.php,seo品牌排名lzw

二.延长作用域链

有的语句可以在执行的时候在作用域的栈前端加临时入一个变量对象,在语句执行完毕后清除,从而使作用域得到延长,下列两个语句会延长作用域:

1.try-catch语句的catch语句

2.with语句

如:

function buildUrl() { var qs = "?debug=true"; with(location){ var url = href + qs; } return url;}

在此,with语句接收的是location对象,因此其变量对象中就包含了location对象的所有属性和方法,而这个变量对象被添加到了作用域链的前端。buildUrl()函数中定义了一个变量qs。当在with语句中引用变量href时(实际引用的是location.href),可以在当前执行环境的变量对象中找到。当引用变量qs时,引用的则是在buildUrl()中定义的那个变量,而该变量位于函数环境的变量对象中。至于with语句内部,则定义了一个名为url的变量,因而url就成了函数执行环境的一部分,所以可以作为函数的值被返回。

三.无块级作用域

1.在其他语言中,花括号括起来的都是变量的作用域,比如循环语句等等,但是js是没有块级作用域的。

2.js在声明变量时,如果没有加var,默认的是全局变量。

3.js查询标识符,顺序是先在局部作用域中查询,后在全局作用域中查询。

如:

var color = "blue";function getColor(){ var color = "red"; return color;}//"red"alert(getColor());

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。