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 相关文章推荐
更优雅的事件触发兼容
Oct 24 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
Apr 24 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
Aug 08 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
Dec 25 Javascript
Extjs grid添加一个图片状态或者按钮的方法
Apr 03 Javascript
理解javascript中的闭包
Jan 11 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
Oct 15 Javascript
vue项目中v-model父子组件通信的实现详解
Dec 10 Javascript
vue中的自定义分页插件组件的示例
Aug 18 Javascript
如何阻止小程序遮罩层下方图层滚动
Sep 05 Javascript
JS如何在不同平台实现多语言方式
Jul 16 Javascript
AngularJS实现多级下拉框
Mar 25 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注入点构造代码
2008/06/14 PHP
PHP 文件缓存的性能测试
2010/04/25 PHP
php 根据url自动生成缩略图并处理高并发问题
2014/01/23 PHP
php打乱数组二维数组多维数组的简单实例
2016/06/17 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
Vuex实现数据增加和删除功能
2019/11/11 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
python连接池实现示例程序
2013/11/26 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
python递归全排列实现方法
2018/08/18 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
CSS3支持IE6, 7, and 8的边框border属性
2012/12/28 HTML / CSS
师范生自荐信
2013/10/27 职场文书
《窗前的气球》教学反思
2014/04/07 职场文书
2015新学期家长寄语
2015/02/26 职场文书
安全员岗位职责范本
2015/04/11 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL