文档章节

在JavaScript中释放变量

一夜七次郎啊
 一夜七次郎啊
发布于 2016/11/19 11:05
字数 419
阅读 43
收藏 0

                                                       在JavaScript中释放变量

    在Javascript是可以使用delete来手动删除变量,通过这样的方法让GC来回收内存,但在JS中并不是所有的对象都可以被删除的, kangex在他的博文中对此作了详细说明:Understanding delete

    在 Stoyan Stefanov’s 中 Object-Oriented JavaScript 书中曾提到:方法可以被当作普通变量那样被删除。(function is treated as a normal variable—it can be copied to a different variable and even deleted.),并有例程:

var sum = function(a, b) {return a + b;}
var add = sum;
delete sum;
typeof sum;    //undefined


    这其实是错误的。 作者很可能使用了Firebug来快速地调试过这段代码,如果将其粘到Chrome中结果就会是:

var sum = function(a, b) {return a + b;}
var add = sum;
delete sum;
typeof sum;    //function


    因为JS对象都会有一些内置属性,如: ReadOnly, DontEnum, DontDelete and Internal;但在FF的console中,所有的代码都是通过eval_r("codes")来执行的,Javascript中有存在 Global code(当前)\ Function code\ Eval code 几种对象。 通过eval执行的JS对象都是不含:DontDelete属性,因此可以删除,因此书上讲的不一定是对的,即使是看上去很权威的书。

    在JS中通过 var\function 声明因含有DontDelete,而不可被删除:

var x = 1;
delete x; // false
typeof x; // 1


function x(){}
delete x; // false
typeof x; // "function"


    但是对象的属性、数组成员却是可以删除的:

var o = { x: 1 };
delete o.x; // true
typeof o.x; // undefined

num = 123;  //因为num前面没有var,所有等价于: this.num = 123, 即当前对象的一个属性。
delete num;


    因此如果我们要回收某个对象可以使用Object来封装一下。

本文转载自:http://blog.sina.com.cn/s/blog_54da57aa01012z64.html

一夜七次郎啊
粉丝 17
博文 136
码字总数 88446
作品 0
南京
程序员
私信 提问
前端进阶(第一期)-调用堆栈笔记

1-1 理解 Javascript 执行上下文和执行栈 原文地址 知识点有: JavaScript程序的内部执行机制; 理解执行上下文和执行栈; 理解以上知识点有助于理解JavaScript的提升机制、作用域和闭包 执行...

xszi
2018/12/04
0
0
容易被遗忘的前端基础:Javascript 内存详解

目录 简介 某些语言,比如C有低级的原生内存管理原语,像malloc()和free()。开发人员使用这些原语可以显式分配和释放操作系统的内存。 相对地,JavaScript会在创建变量(对象、字符串)时自动...

稻草叔叔
03/21
0
0
用垃圾回收机制解释JavaScript中的闭包

说起javascript中的闭包,首先要知道为什么会存在闭包,其作用又是什么。且为什么闭包中就能让外层函数的变量始终保存呢?下面我们将从这两个角度去剖析它。当然,大神绕道,谢谢哈。 开门见...

_呜啦啦啦火车笛
01/31
0
0
从闭包函数的变量自增的角度 - 解析js垃圾回收机制

前言 感觉每一道都可以深入研究下去,单独写一篇文章,包括不限于闭包,原型链,从url输入到页面展示过程,页面优化,react和vue的价值等等。 代码实现 原理 因为times变量一直被引用,没有被...

燕儿199606
2018/06/20
0
0
JavaScript世界的一等公民 - 函数

简介 在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,...

i33
2013/03/14
161
0

没有更多内容

加载失败,请刷新页面

加载更多

skywalking(容器部署)

skywalking(容器部署) 标签(空格分隔): APM [toc] 1. Elasticsearch SkywalkingElasticsearch 5.X(部分功能报错、拓扑图不显示) Skywalking需要Elasticsearch 6.X docker network create......

JUKE
12分钟前
2
0
解决Unable to find a single main class from the following candidates [xxx,xxx]

一、问题描述 1.1 开发环境配置 pom.xml <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--一定要对上springboot版本号,因......

TeddyIH
13分钟前
1
0
Dubbo服务限制大数据传输抛Data length too large: 13055248, max payload: 8388608解决方案

当dubbo服务提供者向消费层传输大数据容量数据时,会受到Dubbo的限制,报类似如下异常: 2019-08-23 11:04:31.711 [ DubboServerHandler-XX.XX.XX.XXX:20880-thread-87] - [ ERROR ] [com.al...

huangkejie
16分钟前
3
0
HashMap和ConcurrentHashMap的区别

为了线程安全,ConcurrentHashMap 引入了一个 “分段锁” 的概念。具体可以理解把一个大的 map 拆分成 N 个小的 Map 。最后再根据 key.hashcode( )来决定放到哪一个 hashmap 中去。 hashmap ...

Garphy
17分钟前
0
0
购买SSL证书需要注意哪些问题

为了保障网站的基本安全,为网站部署SSL证书,已经是一种常态了。各大浏览器对于安装了SSL证书的网站会更友好,并且不会发出“不安全”的提示。部署SSL证书之前首先得去给网站购买一个SSL证书...

安信证书
46分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部