Сопряжение
В том числе аргумент функции является фактически то же самое, как обзорного переменную (другими словами, это эффективно то же самое, определяя ссылку на уровне функций с использованием var
ключевое слово). Основная причина предоставления аргументов функции (в JavaScript) - для вашего собственного интерфейса.
arguments
объект
Аргументы могут по-прежнему передаются функции без параметров, и по-прежнему будут доступны в «скрытой» arguments
объект - который является своего рода «псевдо-массив» (если вы будет), в том, что это функционально массив, но не оснащен тем же API, JavaScript вооружает Array
(псевдо-типа) с:
// The following functions do the same thing, but one is "more readable"
function foo() {
return arguments;
}
function bar(baz, qux) {
return arguments;
}
оценки (интерфейс) против выполнения (реализации)
Когда обе функции оценивали (в файле «нагрузки»), то arguments
объект находится в каждом определении функции undefined
; объект не становится «определенным», пока функция не выполняет код; чтобы визуализировать, что с помощью псевдо-код, он бы выглядеть примерно так:
// Function bodies (as objects)
foo : {
arguments : new Array // [undefined]
__proto__ : Empty() // the super-object that allows this object to inherit "functionality"
}
bar : {
arguments : new Array(baz, qux) // [undefined, undefined]
__proto__ : Empty()
}
Функция вызова
Итак, когда вы вызываете функцию, она «реализует» или «исполняет» его тело (его «объект»). Когда это произойдет, если объекты, которые были введены в объект , определены, то функция может ссылаться на них. Если нет, будет выбрана эталонная ошибка, занесенная в журнал, что переменные undefined
в этой области.
Короче:
Это не нужно взаимодействовать переменные функции-сфера уровня (так называемые «частные члены») с использованием var
, потому что язык уже придает arguments
объект для всех объектов function
тела ,
Больше чтения:
JavaScript запоминание: "Функция-кэширование" несколько аргументов для повышения производительности: http://decodize.com/javascript/javascript-memoization-caching-results-for-better-performance/
Вы можете использовать 'this' слово; Я не думаю, что это означает, что вы думаете, что это значит. – Mathletics
Да, имя параметра уже делает его локальной переменной. – Bergi