Можно ли как-то заменить оригинальный объект, являющийся аргументом функции? - PullRequest
0 голосов
/ 03 октября 2018
function f(obj) {
    obj = _ => console.log(
        'LOCAL object was replaced, how to replace from the outer scope?');
}

f(fetch);

Как я понимаю, это невозможно, но, может быть, существует какая-то хитрость?

1 Ответ

0 голосов
/ 03 октября 2018

Нет, вы не можете этого сделать.

Вместо этого вам лучше всего вернуть новый объект и переназначить при вызове:

function f(obj) {
    return _ => console.log(
        'LOCAL object was replaced, how to replace from the outer scope?');
}

fetch = f(fetch);

Кроме того, вы можете передать контейнер, в котором целевой объект является частью его состояния, и обновить состояние этого контейнера:

function f(container) {
    container.obj = _ => console.log(
        'LOCAL object was replaced, how to replace from the outer scope?');
}

var c = {obj: fetch};    
f(c);
// ...use c.obj...

или

function f(container) {
    container[0] = _ => console.log(
        'LOCAL object was replaced, how to replace from the outer scope?');
}

var c = [fetch];    
f(c);
// ...use c[0]...
...