JavaScript是否在每次调用函数时都会发生内存泄漏
目前,我正在参加一个JavaScript培训,培训师告诉我们,您编写的每个函数都是构造函数,每次调用它时,都会创建一个新对象 考虑以下代码JavaScript是否在每次调用函数时都会发生内存泄漏,javascript,performance,memory-leaks,Javascript,Performance,Memory Leaks,目前,我正在参加一个JavaScript培训,培训师告诉我们,您编写的每个函数都是构造函数,每次调用它时,都会创建一个新对象 考虑以下代码 function Test(){ Console.log("Test"); } Test(); Test(); 所以每次我调用Test函数时,它会每次创建一个新对象吗 更新 根据他的说法,以下代码不会导致内存泄漏 function Test(name){ this.name = name; } var one = new Test("Nic
function Test(){
Console.log("Test");
}
Test();
Test();
所以每次我调用Test函数时,它会每次创建一个新对象吗
更新
根据他的说法,以下代码不会导致内存泄漏
function Test(name){
this.name = name;
}
var one = new Test("Nicholas");
function createTest(name){
var t = new Object();
t.name = name;
return t;
}
var two = createTest("Nicholas");
下面的代码将分配一个额外的对象,并将导致内存泄漏
function Test(name){
this.name = name;
}
var one = new Test("Nicholas");
function createTest(name){
var t = new Object();
t.name = name;
return t;
}
var two = createTest("Nicholas");
您编写的每个函数都是构造函数
不,那不是真的
每次调用它时,都会创建一个新对象
如果您正在使用new调用构造函数,那么是的,一个新对象将被装箱。否则,这并不总是正确的
是的,在创建对象或调用函数时不会发生内存泄漏。每个函数都可以充当构造函数,但只有在使用关键字调用时才会创建新对象:
你对JavaScript中的新操作符感到困惑吗?想知道函数和构造函数之间的区别是什么?或者原型到底是用来干什么的 什么是构造函数 构造函数是用作构造函数的任何函数。语言没有区别。函数可以编写为用作构造函数或作为普通函数调用,也可以任意使用 构造函数与新关键字一起使用:
var Vehicle = function Vehicle() {
// ...
}
var vehicle = new Vehicle();
调用构造函数时会发生什么?
调用new Vehicle时,JavaScript执行四项操作:
它会创建一个新对象
它将对象的构造函数属性设置为Vehicle
它设置要委托给Vehicle.prototype的对象
它在新对象的上下文中调用Vehicle
新车辆的结果就是这个新对象
一,。它将创建新对象。
这没什么特别的,只是一个新鲜的
新对象:{}
二,。它将对象的构造函数属性设置为VEHICLE
这意味着两件事:
vehicle.constructor == Vehicle // true
vehicle instanceof Vehicle // true
这不是一个普通的财产。如果枚举对象的属性,它将不会显示。此外,您可以尝试设置构造函数,但只需在这个特殊的构造函数上设置一个普通属性。也就是说:
vehicle; // {}
var FuzzyBear = function FuzzyBear() { };
vehicle.constructor = FuzzyBear;
vehicle; // { constructor: function FuzzyBear() }
vehicle.constructor == FuzzyBear; // true
vehicle instanceof FuzzyBear // false
vehicle instanceof Vehicle // true
基础的内置构造函数属性是无法手动设置的。它只能为您设置,作为新建关键字构造的一部分
三,。它设置要委托给VEHICLE.PROTOTYPE的对象
现在它变得有趣了
函数只是一种特殊的对象,与任何对象一样,函数也可以具有属性。函数自动获取名为prototype的属性,该属性只是一个空对象。这个物体得到一些特殊的处理
构造对象时,它继承其构造函数原型的所有属性。我知道,这是一个很有头脑的问题。在这里
你说了一口。
JavaScript原型链与大多数语言的工作方式稍有不同,因此理解起来很难。当JavaScript的语法使它看起来更像其他语言时,就像继承Java的新操作符一样,这并没有使它变得更容易。但是如果你知道你在做什么,你可以用它做一些疯狂的酷的事情。没有内存泄漏。并不是每个函数都是构造函数,这取决于您如何调用它,即使用new.Test只是一个普通的旧函数调用。没有泄漏。未创建对象。您创建并保留引用的对象不是内存泄漏。这是您创建并正在使用的对象-这不是泄漏。它使用一些内存,但这是所有对象在使用它们时所做的。如果您没有在某个变量中保留对该对象的引用,那么垃圾收集器将清理它。这里没有泄漏。但如果每个函数都不是构造函数,那么调用一个函数怎么会产生内存?@code13:-那么调用一个函数怎么会产生内存?我不明白!