js函数的引用, 关于内存的开销


Posted in Javascript onSeptember 17, 2012

请看如下代码:

var arr = []; 
var cc = function(){alert('xx');}; 
for(var i = 0; i<2; i++){ 
arr[i] = function(){alert('yy');} 
arr[i+10] = cc; 
} 
console.group('开始') 
console.group('1') 
console.info( arr[0] == arr[1]); 
console.info( arr[0] === arr[1]); 
console.info( arr[0].toString()); 
console.info( arr[1].toString()); 
console.groupEnd('1') 

console.group('2') 
console.info( arr[10] == arr[11]); 
console.info( arr[10] === arr[11]); 
console.info( arr[10].toString()); 
console.info( arr[11].toString()); 
console.group() 
console.groupEnd('开始');

在火狐的firebug中的控制台运行结果如下图:

js函数的引用, 关于内存的开销

分析:

第五行代码的循环开始,循环结束后 arr数组得到的结果为:
arr[0] = function(){ alert('yy'); }
arr[1] = function(){ alert('yy'); }
arr[10] = cc
arr[11] = cc
可以看出来, 控制台进行结果,上图。
arr[0] 不等于 arr[1]
但是 arr[10] 等于 arr[11] , 因为它引用了前面定义的变量。
其实在循环的过程中都在重新定义函数function(){alert('yy');}
arr[0] 和 arr[1]的toString 输出的内容是相同的。 但是两个是独立的方法, 占用各自的内存,所以为了省内存, 可以用于把函数定义在循环外。
函数定义在循环外面的前提条件是,函数没有接受在循环内变化的变量。

Javascript 相关文章推荐
在网页里看flash的trace数据的js类
Jan 10 Javascript
jquery+ajax实现跨域请求的方法
Jan 20 Javascript
JS图片压缩(pc端和移动端都适用)
Jan 12 Javascript
jQuery自定义多选下拉框效果
Jun 19 jQuery
Vue组件之Tooltip的示例代码
Oct 18 Javascript
JavaScript数组去重算法实例小结
May 07 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
May 08 Javascript
如何通过setTimeout理解JS运行机制详解
Mar 23 Javascript
JS实现查找数组中对象的属性值是否存在示例
May 24 Javascript
详解ES6 CLASS在微信小程序中的应用实例
Apr 24 Javascript
Vue Router中应用中间件的方法
Aug 06 Javascript
Js数组扁平化实现方法代码总汇
Nov 11 Javascript
JavaScript中的稀疏数组与密集数组[译]
Sep 17 #Javascript
JavaScript中:表达式和语句的区别[译]
Sep 17 #Javascript
JavaScript取得鼠标绝对位置程序代码介绍
Sep 16 #Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
Sep 14 #Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
Sep 14 #Javascript
javascript时区函数介绍
Sep 14 #Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
Sep 14 #Javascript
You might like
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
&amp;lt;script defer&amp;gt; defer 是什么意思
2009/05/10 Javascript
JavaScript 数组循环引起的思考
2010/01/01 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
Python的动态重新封装的教程
2015/04/11 Python
Python上传package到Pypi(代码简单)
2016/02/06 Python
python 开发的三种运行模式详细介绍
2017/01/18 Python
python组合无重复三位数的实例
2018/11/13 Python
详解python--模拟轮盘抽奖游戏
2019/04/12 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
python障碍式期权定价公式
2019/07/19 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
凯撒娱乐:Caesars Entertainment
2018/02/23 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
校园文明倡议书
2014/05/16 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
汇报材料怎么写
2014/12/30 职场文书
学习经验交流会总结
2015/11/02 职场文书
加强党性修养心得体会
2016/01/21 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python