`
xieye
  • 浏览: 837831 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

关于js函数占用内存的疑问

    博客分类:
  • PHP
J# 
阅读更多
<ul id="ul1">
  <li>1</li>
  <li>2</li>
  <li>3</li>
</ul>
<script>
  var lis = document.getElementById('ul1').getElementsByTagName('li');
  for(var i=0;i<lis.length; i++)
  {
     lis[i].onclick=function(){
       alert(this.firstChild.nodeValue);
     };
  }
</script>


 

 请问匿名函数是否占用了3份内存?

恳请赐教!

xieye

20080313

分享到:
评论
14 楼 jfxia 2008-04-02  
关注中...
13 楼 zqrain 2008-03-28  
afcn0 写道
其实函数对象占用的内存远远比不上其声明所包含的scope chain当中的执行环境,与其在这里讨论到底是一份还是3份,不如讨论下new Function取代function(){.....}是否有意义


愿闻其详!能否解释的更详细一点?
12 楼 afcn0 2008-03-14  
其实函数对象占用的内存远远比不上其声明所包含的scope chain当中的执行环境,与其在这里讨论到底是一份还是3份,不如讨论下new Function取代function(){.....}是否有意义
11 楼 srdrm 2008-03-14  
占三份又能占多少呢? 你做成匿名的还不是因为代码比较少. 代码多了, 这样写可读性太差. 多的话做成有名的, 然后再赋上就只有一份了
10 楼 xieye 2008-03-14  
既然高手都这么说,我就放心了。当然,太长的函数我还是会单独提取出来,尽管我本不想起函数名。多谢!
9 楼 xuyongping 2008-03-14  
ajaxgo 写道
对,三个Function实例,其引用不相等,即
lis[i].onclick != lis[j].onclick  (i!=j)


我还是同意你的观点。。。我也赞成。。有三个function 实例。。既然有三个实例。。就会占用三分内存。。。
8 楼 ajaxgo 2008-03-14  
我觉得没必要考虑那么多,研究这些还不如优化上层代码。管js解释器到底是不是对这类匿名函数进行优化,尽量确保不生成相同的匿名函数,是最安全最高效的。
和其他语言的一样,把公用代码抽象成接口。
7 楼 sp42 2008-03-13  
同意前两位的观点。
Function类型是JS中很特殊的类型。
可以试着在debug环境下做做实验并观察之。
6 楼 fins 2008-03-13  
同意楼上 这个问题好像以前讨论过

印象中 hax 和 afcn0 都参与过那个讨论 呵呵
5 楼 afcn0 2008-03-13  
不对,!=并不代表内存如何实现,我认为js解释器是当成一个function对象的,优化
4 楼 xuyongping 2008-03-13  
其实楼上的已经回答了你呀。。
3 楼 xuyongping 2008-03-13  
是占用了三个。。


这里的三个function 相当于new 了三次虽然new 的三个值是一样的。。(效果是一样的)
2 楼 xieye 2008-03-13  
我更关心的是占用客户机器的内存是否更多,还是只有一份?
1 楼 ajaxgo 2008-03-13  
对,三个Function实例,其引用不相等,即
lis[i].onclick != lis[j].onclick  (i!=j)

相关推荐

    易语言减少内存占用

    在优化内存占用的场景中,这个函数可能被用来获取当前进程的信息,以便进一步分析和调整内存使用。 API函数`API_EmptyWorkingSet`的作用是清除一个进程的工作集,将所有页面从物理内存移出,使其变为无效。这会导致...

    JavaScript函数式编程.pdf

    不过,由于【标题】中提供了文档的名称——"JavaScript函数式编程.pdf",我可以根据这个名称扩展出关于JavaScript函数式编程的知识点。 JavaScript函数式编程的知识点非常丰富,涉及很多方面的内容,下面将详细介绍...

    到底一个线程占用多少内存

    线程的内存占用主要分为两大部分:内核空间和用户空间。 首先,线程在内核空间中的占用主要是由线程控制块(TCB,Thread Control Block)构成的。TCB包含了线程状态、调度信息、寄存器上下文等关键数据,它的大小...

    javascript指南和函数式编程

    而《JavaScript函数式.zip》可能是一份关于JavaScript函数式编程的资料集合,函数式编程是一种编程范式,强调使用函数和避免改变状态。其中可能涵盖以下知识点: 1. **纯函数**:理解纯函数的定义,即给定相同的...

    JS 函数式编程指南 PDF

    总结而言,JS函数式编程指南为读者提供了一种途径,借助于JavaScript这种广泛使用的编程语言,去理解和掌握函数式编程的核心概念和实践技巧。这本指南不仅涵盖了函数式编程的基础理论,还详细介绍了如何在实际开发中...

    一个占用内存极少的菜单系统的实现(转)

    在这个系统中,设计者可能采用了动态内存管理策略,以降低内存占用。例如,他们可能使用了链表数据结构来存储菜单项,而不是一次性分配固定大小的数组,这样可以根据实际需求动态增加或减少菜单项,从而节约内存。 ...

    通过Key前缀分析Redis的内存占用按内存大小排序导出结果到csv文件

    为了实现按内存大小排序,我们需要在获取每个键的内存占用后,将其与键本身保存在一个数组中,然后使用PHP的`usort`函数进行自定义排序。排序完成后,我们可以使用PHP的`fputcsv`函数将结果写入CSV文件,这是一种...

    javascript实现根据函数名称字符串动态执行函数的方法示例

    此外,关于JavaScript的其它编程技巧,本篇介绍了多个专题,包括常用函数技巧、面向对象入门、json操作、切换特效、查找算法、错误与调试、数据结构与算法、遍历算法以及数学运算的用法总结。这些内容都是非常实用的...

    C指针系列之跨函数内存申请

    简单的C语言中使用指针在子函数内部申请内存并返回给主函数使用的范例。

    QT和网页中的JavaScript函数进行相互调用的实现

    - 这里的回调函数用于处理JavaScript函数的异步返回结果,如果需要同步获取结果,可以使用`QWebEngineScript`来注册一个全局JavaScript对象,然后通过该对象调用JavaScript函数。 2. **JavaScript调用QT函数**: ...

    API修改进程占用内存.rar

    这些API可以帮助调整进程的内存占用。 4. **错误处理**:在所有API调用之后,都需要检查返回值,以确保操作成功。如果失败,可能需要捕获错误并进行相应的处理。 5. **安全考虑**:直接操作其他进程的内存是非常...

    qt 调用javascript函数 带参数

    本篇文章将深入探讨如何在Qt中调用JavaScript函数并传递参数,以实现更丰富的功能。 首先,Qt的Webkit模块是实现这一目标的关键。Qt Webkit是一个基于WebKit引擎的组件,它允许Qt应用渲染网页内容,并与网页进行...

    JS函数式编程指南

    ### JS函数式编程指南 #### 引言 函数式编程是一种编程范式,它强调使用纯函数和不可变数据结构来进行软件开发。本指南旨在帮助读者深入理解函数式编程的基本概念及其在JavaScript中的应用。 #### 第1章: 我们在...

    JS function函数 基础案例

    本教程将深入探讨JS函数的基础知识,通过实际案例帮助理解其工作原理。 一、函数定义 在JavaScript中,我们可以使用`function`关键字来定义一个函数。基本语法如下: ```javascript function 函数名(参数1, 参数2,...

    JS 函数式编程指南

    JavaScript(简称JS)函数式编程是一种编程范式,它强调将计算视为函数的组合,而不是状态的变化或指令的序列。这种编程风格可以帮助开发者编写出更简洁、可读性更强、易于测试和维护的代码。本指南将深入探讨JS函数...

    易语言取系统内存占用率

    "取系统内存占用率"是这个程序的核心功能,它通过调用Windows API中的`GlobalMemoryStatusEx`函数来获取系统内存的相关信息。`GlobalMemoryStatusEx`是Windows操作系统提供的一种接口,用于获取系统整体的内存状态,...

    JavaScript学习笔记_js常用函数封装_js包.zip

    本压缩包“JavaScript学习笔记_js常用函数封装_js包.zip”包含了对JavaScript基础及进阶技巧的学习资料,特别关注了函数封装和模块化开发实践。 首先,`tool.js`可能是一个实用工具函数集合,封装了一些常见的...

    获取进程的cpu和内存的占用大小

    接着,调用`OpenProcess`函数获取进程句柄,再使用`GetProcessMemoryInfo`获取内存信息,最后通过`GetProcessTimes`计算CPU占用率。 以下是一个简单的C++代码示例,展示了如何获取进程ID为pid的进程的CPU占用率和...

    得指定进程占用的内存大小

    当我们谈论“得指定进程占用的内存大小”,我们实际上是在探讨如何获取操作系统中某个特定进程所使用的内存资源。这涉及到系统级编程和进程管理的知识,通常需要使用操作系统提供的API或者利用特定的工具来实现。在...

    VC函数(API,VC常用内存分配函数等)

    2. **GlobalAlloc**: `GlobalAlloc`是全局内存分配函数,它在进程间共享的内存空间中分配内存。函数的基本形式为`HGLOBAL GlobalAlloc(UINT uFlags, DWORD dwBytes)`,`uFlags`是分配类型,如`GMEM_FIXED`(分配固定...

Global site tag (gtag.js) - Google Analytics