js中闭包的作用域问题
来源:互联网 发布:怎样网购淘宝怎样付款 编辑:程序博客网 时间:2024/06/05 15:48
<script type="text/javascript"> /* *在js中当进行函数调用,会为每个函数增加一个属性SCOPE,通过这 个属性来指向一块内存 *这块内存包含所有的上下文变量,当在某个函数中调用新函数之后,新函数依然会有一个作用域 *来执行原有函数的SCOPE和自己新增的SCOPE,这样就形成了一个链式结构,这就是js中的作用于链 *注意内存模型,看博客详解 */ var color = "red"; function showColor(){ alert(this.color); } function changeColor(){ var anotherColor = "blue"; function swapColor(){ var tempColor = anotherColor; anotherColor = color; color = tempColor; } swapColor(); } changeColor(); showColor(); </script>
当程序执行完changeColor时,会依次释放掉swapColor和changeColor的作用域。然后执行showColor,当再次调用this.color时已经被修改为blue了
闭包作用域链延长的关键
<script type="text/javascript"> /* *通过以下操作带来的最大的好处是,compareObject的作用域变大了, *当compareObject结束之后,prop这个变量依然存在 */ function compareObject(prop){ //匿名函数不是闭包 return function(obj1, obj2){ if(obj1[prop] > obj2[prop]) return 1; else if(obj1[prop] < obj2[prop]) return -1; else return 0; } } var o1 = {name:"Leno", age:22}; var o2 = {name:"Ada", age:28}; //此时就是基于age来比较的 /* *在java或c++中,以下代码执行完毕之后,需要进行内存释放 *此时对于java或c++这些静态语言而言,prop会被释放 *但是在js中作用域却变大了 */ var compare = compareObject("age"); //此时就比较了o1和o2 /* *在js中,prop在这里依然可以被访问,这种通过返回函数的方法扩大作用域的方法就是闭包 */ var res = compare(o1, o2); alert(res); </script>
0 0
- js中闭包的作用域问题
- JS作用域的问题
- js作用域的问题
- js 作用域问题
- 一个Js方法作用域的问题
- js的this作用域问题
- JS中作用域的问题
- js的块级作用域问题
- Js的函数及作用域问题
- js 作用域的问题
- JS变量作用域的问题
- JS中this的作用域问题
- JS作用域的问题(二)
- js变量作用域问题
- JS变量作用域问题
- js作用域相关问题
- Js的作用域
- js的作用域
- 虚函数与纯虚函数
- iOS 循环创建btn,选中一个,其他的都不选中
- 关于Linux-文件系统
- POI导出EXCEL经典实现
- OC----从N个数中选取M个数的组合
- js中闭包的作用域问题
- 移植lsusb教程
- Android端消息推送总结:实现原理、心跳保活、遇到的问题等
- JAVA 常用的xml工具类
- Android使用MediaPlayer播放流媒体,支持远程以及本地流媒体,一行代码实现
- IntelliJ IDEA编写Java工程
- C# 日志操作类
- 安卓应用开发第二章
- 解题报告_HDU.2094产生冠军_set