Вероятная причина, по которой он не предупреждает при назначении параметра переменной, состоит в том, что для этого потребуется сложный анализ потока данных. Предположим, у вас есть такой код:
function foo(param, flag) {
var copy = flag ? param : {...param};
copy.bar = 2;
console.log('arg 0: ', arguments[0], 'param:', param, 'copy:', copy);
return copy; // A pointless return, the original object has been modified.
}
Теперь он не может определить, содержит ли copy
тот же объект, что и param
, или клон, это зависит от значения flag
.
Или как-то так:
function foo(param) {
var copy = param;
var copy2 = copy;
var copy3 = copy2;
copy3.bar = 2;
console.log('arg 0: ', arguments[0], 'param:', param, 'copy:', copy3);
return copy3;
}
Это потребует отслеживания всей цепочки ссылок, чтобы определить, что copy3
совпадает с param
.
Отслеживать это не невозможно, оптимизаторы часто делают это. Но это может быть излишним для линтера.