Вы сказали, что хотите изменить значения «именованных переменных», поэтому я предполагаю, что вы имеете в виду формальные параметры (show
, me
и т. Д.)
Аргументыобъект может получить доступ ко всем аргументам, передаваемым в функцию, но, похоже, он не предлагает способ изменить значения самих именованных переменных.
Имеет, но только в свободном режиме,не строгий режим:
function showMeTheBunny(show, me, the, bunny)
{
for (let n = 0; n < arguments.length; ++n)
{
arguments[n] = arguments[n].trim();
}
return `${show} ${me} ${the} ${bunny}: ?`;
}
При этом arguments[0] = arguments[0].trim()
обновляет значение формального параметра show
, arguments[1] = arguments[1].trim()
обновляет me
и т. д. Но только в свободном режиме. В строгом режиме обновляется только arguments[x]
, а не формальный параметр;ссылка на него удалена. (Стоит отметить, что строгий режим используется по умолчанию в модулях и class
конструкциях.)
Live Пример:
// Each of these strings are padded with intentional and unnecessary whitespace:
let show = " show ";
let me = " me ";
let the = " the ";
let bunny = " bunny ";
function showMeTheBunny(show, me, the, bunny)
{
for (let n = 0; n < arguments.length; ++n)
{
arguments[n] = arguments[n].trim();
}
return `${show} ${me} ${the} ${bunny}: ?`;
}
console.log(showMeTheBunny(show, me, the, bunny)); // output: "show me the bunny"
Существуют и другие способы, но они не изменяют значения формальных параметров. Например, вы можете использовать параметр rest:
function showMeTheBunny(...rest)
{
rest = rest.map(entry => entry.trim());
const [show, me, the, bunny] = rest;
return `${show} ${me} ${the} ${bunny}: ?`;
}
Live Пример:
"use strict";
// Each of these strings are padded with intentional and unnecessary whitespace:
let show = " show ";
let me = " me ";
let the = " the ";
let bunny = " bunny ";
function showMeTheBunny(...rest)
{
rest = rest.map(entry => entry.trim());
const [show, me, the, bunny] = rest;
return `${show} ${me} ${the} ${bunny}: ?`;
}
console.log(showMeTheBunny(show, me, the, bunny)); // output: "show me the bunny"
Это работает в строгом режиме.
Другой вариант - принять объект со свойствами для параметров, а затем (снова) использовать деструктуризацию для получения отдельных переменных. :
function showMeTheBunny(args)
{
for (const [name, value] of Object.entries(args)) {
args[name] = value.trim();
}
const {show, me, the, bunny} = args;
return `${show} ${me} ${the} ${bunny}: ?`;
}
Live Пример:
"use strict";
// Each of these strings are padded with intentional and unnecessary whitespace:
let show = " show ";
let me = " me ";
let the = " the ";
let bunny = " bunny ";
function showMeTheBunny(args)
{
for (const [name, value] of Object.entries(args)) {
args[name] = value.trim();
}
const {show, me, the, bunny} = args;
return `${show} ${me} ${the} ${bunny}: ?`;
}
console.log(showMeTheBunny({show, me, the, bunny})); // output: "show me the bunny"
Это также работает в строгом режиме.