最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

oop - What is the best way to delete an object in JavaScript? - Stack Overflow

matteradmin6PV0评论

In JavaScript, I have plex objects prising functions, variables and closures.

These objects are very large, very plex and created and destroyed over and over again. I will be working on a very low-powered, very low-memory device, so it's important to me that when the objects are deleted that they are really gone.

Here's a code example:

window["obj"] = {};
obj.fun1 = function(){
    console.log(1);
};

(function(){
    var n = 2;
    function fun(){
        console.log(n);
    }
    obj.fun2 = fun;
})();

(function(){
    var w = "Three";
    function fun(){
        console.log(w);
    }
    obj.fun3 = fun;
})();

(function(){
    var w = "f.o.u.r.";
    function fun(){
        setInterval(function(){
            console.log(w);
        }, 1e3); // e.g. a timeout
    }
    obj.fun4 = fun;
})();

obj.fun1();
obj.fun2();
obj.fun3();
obj.fun4();

var fun2 = obj.fun2;

// window.obj = null;
// window.obj = undefined;
delete window.obj;
console.log(typeof obj); // undefined

A secondary issue is the question of "lingering references", such as the following:

fun2(); // 2
// Interval: "f.o.u.r.", "f.o.u.r.", "f.o.u.r.", "f.o.u.r." ...

Is there anything that can be done about those (except a manual clean up before deleting the object)?

A JSFiddle of the code above is here: /

In JavaScript, I have plex objects prising functions, variables and closures.

These objects are very large, very plex and created and destroyed over and over again. I will be working on a very low-powered, very low-memory device, so it's important to me that when the objects are deleted that they are really gone.

Here's a code example:

window["obj"] = {};
obj.fun1 = function(){
    console.log(1);
};

(function(){
    var n = 2;
    function fun(){
        console.log(n);
    }
    obj.fun2 = fun;
})();

(function(){
    var w = "Three";
    function fun(){
        console.log(w);
    }
    obj.fun3 = fun;
})();

(function(){
    var w = "f.o.u.r.";
    function fun(){
        setInterval(function(){
            console.log(w);
        }, 1e3); // e.g. a timeout
    }
    obj.fun4 = fun;
})();

obj.fun1();
obj.fun2();
obj.fun3();
obj.fun4();

var fun2 = obj.fun2;

// window.obj = null;
// window.obj = undefined;
delete window.obj;
console.log(typeof obj); // undefined

A secondary issue is the question of "lingering references", such as the following:

fun2(); // 2
// Interval: "f.o.u.r.", "f.o.u.r.", "f.o.u.r.", "f.o.u.r." ...

Is there anything that can be done about those (except a manual clean up before deleting the object)?

A JSFiddle of the code above is here: http://jsfiddle/8nE2f/

Share Improve this question asked Nov 1, 2013 at 9:49 Oliver MoranOliver Moran 5,1674 gold badges34 silver badges45 bronze badges 3
  • See stackoverflow./questions/8467350/… - obj = null; – davidkonrad Commented Nov 1, 2013 at 9:52
  • I assume you mean that you want to delete the object reference? – Eric Herlitz Commented Nov 1, 2013 at 9:52
  • And this: stackoverflow./questions/8310182/… – Rudy Commented Nov 1, 2013 at 9:54
Add a ment  | 

2 Answers 2

Reset to default 4

You will have the best effect by doing this

window.obj = null;
delete window.obj;

Setting objects to null removes any references to it. Also remember that the delete mand has no effect on regular variables, only properties.

To better ensure object destruction you may consider not using the global context at all, that is usually considered as an antipattern.

The only way to get rid of an object is for JavaScript to garbage-collect it, so making sure there really aren't any references to the object left and praying is the only way to go.

If you're repeatedly creating and destroying the same object, consider using an object pool.

Post a comment

comment list (0)

  1. No comments so far