Object.defineProperty получить / установить закрытие

Хорошо, я пытаюсь создать новый объект следующим образом:

var src = {a:'a', b:'b', c:'c'};
var out = {};
for(var prop in src){   
    Object.defineProperty(out, prop,{
        get: function(){
            return src[prop];
        },
        set: function(val){
            src[prop]=val;
        }
    })
}

И получить плохой результат:

out = {a:'c', b:'c', c:'c'}

Я знаю другие способы создания этого объекта, например:

for (var prop in src) {
    (function(prop) {
        Object.defineProperty(out, prop, {
            get: function() {
                return src[prop];
            },
            set: function(val) {
                src[prop] = val;
            }
        })
    })(prop)
}

или же:

Object.keys(src).map(function(prop){
    Object.defineProperty(out, prop,{
        get: function(){
            return src[prop];
        },
        set: function(val){
            src[prop]=val;
        }
    })
})

Но я не могу понять, почему в первом методе строковый параметр «prop» будет отправлен в функцию «defineProperty» по ссылке. Помогите мне понять это, пожалуйста. Извините за плохой английский.

Ответы на вопрос(1)

Ваш ответ на вопрос