2016-09-22 5 views
1

Я хочу передать объект или массив функции, сделать ее неопределенной и увидеть изменения после завершения выполнения функции.Передача переменной по полной ссылке

var arr = ['aaa', 'bbb', 'ccc']; 
var reset = function (param) { 
    param[0] = 'bbb'; 
    param = undefined; 
} 
reset(arr); 

Все правильно, так что результат ['bbb', 'bbb', 'ccc'], но я хочу, чтобы это было undefined. Возможно ли это сделать эффективно?

+0

Определение «эффективно». Кроме того, вы не можете действительно уничтожить переданный объект в JavaScript (массивы - это объекты). – vlaz

+0

Это невозможно, используя чистый javascript. Однако вы можете создать собственную функцию в C++, которая удалит объект, ссылка на который будет передана ему. Он будет работать только в Node.js, и он будет работать только для объектов, функций и символов. –

ответ

5

JavaScript является передачей по значению языка, поэтому изменение значения параметра функции внутри функции не может иметь влияние на переменном передаются в качестве аргумента.

Если вы хотите сделать что-то подобное, вы можете иметь свою функцию, возвращающую значение:

var reset = function(param) { 
    // think think think 
    if (whatever) 
    return undefined; 
    return param; 
}; 

arr = reset(arr); 

Теперь, если функция решает, что правильно сделать, это опустошить исходной переменной, она возвращает undefined.

Если вы просто хотите, чтобы очистить переменную, однако, нет никакой необходимости в функции:

arr = undefined; 
1

Вы не можете передать переменную по ссылке в JavaScript. Что вы можете сделать вместо этого, если переменная находится в том же или более широкие возможности, чем reset(), это использовать саму переменную внутри функции, как показано ниже:

var 
 
    arr = ['aaa', 'bbb', 'ccc'], 
 
    reset = function() { 
 
    arr = undefined; 
 
    } 
 

 
reset(); 
 
console.log(arr);

Или вместо этого вы можете просто сделать его равным undefined:

var arr = ['aaa', 'bbb', 'ccc']; 
 
arr = undefined; 
 
console.log(arr);

+0

Вы можете передать объекты по ссылке в Javascript. https://jsfiddle.net/8cjsd8ye/. Или я что-то упускаю. – Leeish

+0

@ Подождите, что вам что-то не хватает :) Термин «передать по ссылке» заключается не в передаче ссылок на объекты; это старая терминология, которая действительно предшествует этой концепции. JavaScript - это чисто пропускная способность; просто происходит, что ссылки на объекты являются определенным видом ценности. Если вы внимательно посмотрите на ОП и подумайте, возможно ли, что спрашивается, вы увидите это различие. – Pointy

+0

@ Leeish в лучшем случае вы можете назвать то, что JS делает по-копии-ссылки. Но Pointy правильно, _value_ объекта - это «копия ссылки». – vlaz

Смежные вопросы