Может ли функция без аргумента вызываться с аргументом в JS? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь выяснить, что делает этот кусок кода и как это работает. Как вызывается метод foo = require ('foo'), если он не принимает аргументов?

foo.js

module.export = async () => { do something and return response(200) }

bar.js

let foo = require('foo')
module.exports = {
  foo: async (req) => { return foo(req) }
}

route.js

let api = required('api')
let bar = required('bar')
module.exports = api => {
  api.get('/foo', async req => await bar.foo(req))
}

1 Ответ

0 голосов
/ 10 января 2019

TLDR:

Да, это разрешено.

Как это работает

Все функции в js имеют доступ к локальной переменной с именем arguments. Переменная arguments - это массивоподобный объект (который выглядит как массив, но не является экземпляром класса Array), содержащий все аргументы, переданные функции. Это в основном механизм js, поддерживающий переменные аргументы.

Пример:

function a () {
    for (x=0; x<arguments.length); x++) {
        console.log(arguments[x]);
    }
}

В дополнение к тому, что вы можете передавать больше аргументов, чем определено функцией js, вы также можете передавать меньше аргументов, чем требуется для функции. Аргументы, которые вы не передаете, просто получают значение undefined.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...