when was the closure destroyed? Will it cause a memory leak?
there are many theories on the Internet about whether closures will cause memory leaks. Is there any great god who can answer it?
when was the closure destroyed? Will it cause a memory leak?
there are many theories on the Internet about whether closures will cause memory leaks. Is there any great god who can answer it?
closure is actually the capture of the variables in the parent scope by the function. If the function is in, the closure is in, the function is not referenced, and the closure is destroyed.
function test() {
var data = new Array(100000);
var getData = function(){return data;};
setTimeout(getData, 10000);
}
generally speaking, local variables created within a function are automatically destroyed after the function has finished running. In the example, each time the test function is run, the data data is created. If the getData does not refer to the data variable in the upper scope, the data will be destroyed after the test function finishes running. When getData is created, a special container is created to hold references to variables in the upper scope. It can be said that the closure created by the getData function captures references to external data variables. In theory, the variable getData will also be destroyed after the test function finishes running. This is also true, if there is no later setTimeout. Because setTimeout has been holding the reference to the getData function, and the closure formed by getData captures the reference to the data variable, the data data will always exist and will not be destroyed immediately after the end of the test function. SetTimeout runs the function pointed to by getData after 10 seconds, and then releases the function reference, that is, there are no variables referencing the function pointed to by getData after 10 seconds, then the closure formed by getData can also be destroyed, and the captured upper variables are also released. So in the example, the closure formed by getData is destroyed after 10 seconds.
then why is there a memory leak?
imagine that if you are not using setTimeout but setInterval, in the example, the function getData has been referenced in setInterval, and the closure formed by getData and the variables captured by the closure will remain until you clearInterval. If you forget clear, or if you mistakenly set up multiple timers but don't know that only the last one is clear, there is a memory leak.
in short, as long as no one saves the reference to the function, the function and the closure formed by the function will be destroyed as well.
first of all, we need to correctly understand what a closure is. Generally speaking, a closure is a function set of functions, but it does not necessarily satisfy that a function set function is a closure. So in the long-term summary process, there is another view: the first-level function calls the second-level function, and the second-level function accesses the first-level function lexical scope variable is called the closure. The closure will cause memory leakage, which has always been a drawback of the closure.
Previous: How to listen to the full screen event of exiting video
Next: In sql server, how do I query whether the field in Table An is included in a field in Table B?
The horizontal coordinates of echarts are not specifically marked, and the X coordinates do not have a grid to indicate. Here is a figure that specifies . js * * createChartSix() { this.$http .get(this.$api.dataChart) .then(rsp => { ...
sincerely ask for advice: < hr > I want to use node as the background to build a video streaming server. The front end is similar to Youku VOD. It can record the playback node function, and load the progress bar at any point (starting from the c...
I need to implement in a chained promise function, any function error in the middle terminates the program, and can catch the error function, and then perform different operations according to different error functions. How can the following code be imp...
I would like to ask what is wrong with this code. Thank you for your answers. ...
is doing a question on Niuke.com. I encounter a problem: to achieve the function callIt, after the call meets the following conditions 1, the returned result is the result after calling fn 2, and the call parameter of fn is all the parameters after th...
A timing examination system is triggered if the click event is triggered within 5 seconds, and if it is not triggered, the system marks the correct answer at the end of the countdown. How to implement ...
description: a regular match is given to the content of an input box, and the matching content is the product activation code. looks like this: "0C31-0B81-BB32-3094-0C31-0B81-BB32-3094 " Code: $( -sharplicenseCode ).keyup(function () { le...
1. The custom event triggers the click event of .cpcstartrefresh, but triggers 2 click events each time 2. The code is as follows: window.onmessage = function (e) { create an event object, var myEvent = document.createEvent( Event ); m...
I configured the MIME type of the file with the amr suffix in the apache configuration as application ms-download, Why it is a garbled page when opening a file in amr format using window.open in chrome, while a file in amr format can be successfully dow...
I got a set of data, which is to choose the type of question. How can I tell if I have chosen the right one answera: "Olympic Games " answerb: "Asian Games " answerc: "Paralympic Games " answerd: "University Games " id: "1772 " question: "f...
read a number, such as 521 change this number to 0521 but put it into four div separately, how to realize it? 0 < div > 5 < div > 2 < div > 1 < div > ...
react projects cannot save store? using redux, data index.js ReactDOM.render( <Provider store={store}> <Router > < Provider>, document.getElementById( root )) registerServiceWorker() actions export const SET_USER = ...
how to find all the NA characters in a HMLT page and replace it with "and invalid " with native JS ...
...
suppose there are only a.js and b.js (only two js and nothing else) b.js export A variable is used for a.js can you directly use import and export without using packaging and compilation tools such as webpack or babel can it be achieved with the h...
do the gods have plug-ins for uploading attachments in the mobile version that can also be uploaded more than one? ...
what does the code circled in the following picture mean? ...
I look at a html ui project with items such as: var apiserver = window[ apiserver ]; url = apiserver + "filterUrlController getUrlData"; I searched the whole project and couldn t find the value of window [ apiserver ]. How do you un...
In the vue-cli project, I directly introduced the particls library into index.html, and the related files are placed in the static directory . <div id="particles-js">< div> <script type="text javascript" src="s...
How does the code return only the result after the last asynchronous operation in the for loop is completed as shown in the figure? Please stop by and give me a hand. ...