Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回函数内创建的对象的Javascript_Javascript_Garbage Collection - Fatal编程技术网

返回函数内创建的对象的Javascript

返回函数内创建的对象的Javascript,javascript,garbage-collection,Javascript,Garbage Collection,我是javascript新手,在研究了javascript的作用域和垃圾收集之后,我仍然不确定什么是正确的方法 我想要一个函数,它的任务是创建一个具有特定属性的对象并返回它。我担心的是,在函数中创建的对象是否会超出范围并被转储。那么基本上,以下哪一项更好,或者两者都错了 function createObject() { var obj = new MyObject(); // set some object properties here

我是javascript新手,在研究了javascript的作用域和垃圾收集之后,我仍然不确定什么是正确的方法

我想要一个函数,它的任务是创建一个具有特定属性的对象并返回它。我担心的是,在函数中创建的对象是否会超出范围并被转储。那么基本上,以下哪一项更好,或者两者都错了

    function createObject() {
            var obj = new MyObject();
            // set some object properties here
            return obj;
    }

    function createObject2(object) {
            // set properties of the input object here
    }
我会这样调用我的函数:

    myOjbect = createObject();
    myOjbect2 = new MyObject();
    createObject2(myObject2);
基本上我更喜欢第一种方法,但是我是否需要担心垃圾收集,是否最好将对象的引用传递到函数中,而不是在函数本身中创建对象

基本上我更喜欢第一种方式,但我会担心垃圾收集吗

不,当你这样做的时候

myOjbect = createObject();
然后
myOjbect
引用函数内部创建的对象。只要这个变量“存在”并保持对对象的引用,它就不会被垃圾收集

基本上我更喜欢第一种方式,但我会担心垃圾收集吗

不,当你这样做的时候

myOjbect = createObject();

然后
myOjbect
引用函数内部创建的对象。只要这个变量“存在”并保留对对象的引用,它就不会被垃圾收集。

第一个更好。您可以在函数中设置所需的一切。如果返回,它将在调用范围内可用

var createObj = function(name) {
     var age = 13;
     var hidden = "hello";
     return {
        age : age,      //you can refer a var from this function
        name : name,    //you can use params
        gender : "male" //you can set new properties
     };
}

var myObj1 = createObj("Penguinator");

console.log(myObj1.name);
//Will output --> Penguinator

console.log(myObj1.age);
//Will output --> 13

console.log(myObj1.male);
//Will output --> "male"

console.log(myObj1.hidden);
//Will output --> undefined   <<-- you can't access this var
var createObj=函数(名称){
年龄=13岁;
var hidden=“你好”;
返回{
age:age,//您可以从这个函数中引用一个变量
name:name,//您可以使用params
性别:“男性”//您可以设置新属性
};
}
var myObj1=createObj(“企鹅”);
console.log(myObj1.name);
//将输出-->计数器
console.log(myObj1.age);
//将输出-->13
console.log(myObj1.male);
//将输出-->“男性”
console.log(myObj1.hidden);

//将输出-->未定义第一个更好。您可以在函数中设置所需的一切。如果返回,它将在调用范围内可用

var createObj = function(name) {
     var age = 13;
     var hidden = "hello";
     return {
        age : age,      //you can refer a var from this function
        name : name,    //you can use params
        gender : "male" //you can set new properties
     };
}

var myObj1 = createObj("Penguinator");

console.log(myObj1.name);
//Will output --> Penguinator

console.log(myObj1.age);
//Will output --> 13

console.log(myObj1.male);
//Will output --> "male"

console.log(myObj1.hidden);
//Will output --> undefined   <<-- you can't access this var
var createObj=函数(名称){
年龄=13岁;
var hidden=“你好”;
返回{
age:age,//您可以从这个函数中引用一个变量
name:name,//您可以使用params
性别:“男性”//您可以设置新属性
};
}
var myObj1=createObj(“企鹅”);
console.log(myObj1.name);
//将输出-->计数器
console.log(myObj1.age);
//将输出-->13
console.log(myObj1.male);
//将输出-->“男性”
console.log(myObj1.hidden);

//将输出-->javascript中未定义的垃圾收集仅在断开对对象的所有引用时发生。javascript中的垃圾收集仅在断开对对象的所有引用时发生。我认为Penguinator不打算在createObj中创建新对象。看起来他想修改一个自定义对象
MyObject
我不认为Penguinator打算在createObj中创建新对象。看起来他想修改一个自定义对象<代码>我的对象