#javascript #variables
#javascript #переменные
Вопрос:
function destroyer(arr) {
var arg = Array.prototype.slice.call(arguments);
arg.splice(0, 1);
return arr.filter(function (val){
return arg.indexOf(val) === -1;
});
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
этот код работает точно. Но если заменить arg.splice(0, 1) на arg = arg.splice(0, 1); , код не работает. Поскольку arg является переменной, поэтому ее значение может быть изменено в течение всего кода, почему это не работает так? Простите меня, если этот вопрос выглядит глупо, но я новичок в javascript и мне очень любопытно изучить все знания об этом.
Ответ №1:
Ваш код не используется arg =
правильно (хотя вы можете сделать это более эффективно, подробнее ниже). arg.splice(0, 1)
удаляет первый элемент из исходного массива (изменяя массив на месте) и возвращает новый массив, содержащий только элемент, который был удален. Это:
var a = [1, 2, 3];
console.log(a.splice(0, 1)); // [1]
console.log(a); // [2, 3]
Если вы используете arg = arg.splice(0, 1);
, вы говорите «Удалите первый элемент из arg
и замените значение arg
переменной ссылкой на новый массив, содержащий только этот удаленный элемент. Таким образом, при последующем использовании arg
используется массив, содержащий удаленную запись, вместо массива, который вы хотели использовать.
Вы можете и, вероятно, должны splice
полностью избегать. Вместо этого просто пропустите первый аргумент при копировании arguments
:
function destroyer(arr) {
var arg = Array.prototype.slice.call(arguments, 1);
// Note --------------------------------------^^^
return arr.filter(function(val) {
return arg.indexOf(val) === -1;
});
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
Комментарии:
1. спасибо за разъяснения. но мой вопрос в том, почему он не работает с использованием ‘arg = ‘
2. @RajatChauhan: Я сказал вам, почему: Потому
splice
что возвращает другой массив, который содержит только удаленный элемент.3. Большое спасибо за помощь … я пробовал пример снова и снова, и теперь я в порядке