Вызов против вызова функции
До этого момента я думал, что "вызов" и "вызов" функции означает одно и то же. Однако в учебнике YouTube он сказал, чтобы вызвать функцию, вызвав ее. Моя первая мысль заключалась в том, что формулировка была ошибкой, но на странице W3Schools по функции Invocation она гласит:
Обычно используется термин "вызов функции" вместо "вызывать функцию"... В этом уроке мы будем использовать invoke, потому что функция JavaScript может быть вызвана без вызова.
Ладно, так что разница. Что это?
Ответы
Ответ 1
Ваш ссылочный текст:
Обычно используется термин "вызов функции" вместо "вызывать функцию"... В этом уроке мы будем использовать invoke, потому что функция JavaScript может быть вызвана без вызова.
Теперь позвольте мне перефразировать это:
Обычно используется термин "вызов функции" вместо "вызывать функцию"... В этом учебнике мы будем использовать the term
invoke instead of call
, потому что функцию JavaScript можно вызвать indirectly
как fn.call()
и fn.apply()
без directly
fn.apply()
как fn()
.
Таким образом, когда я делаю fn()
, он вызывается непосредственно, и когда я делаю это как fn.call()
, он вызывает косвенно, но в обоих случаях функция вызывается. В противном случае, я не вижу здесь никакой разницы, и могу сказать, что я могу назвать функцию разными способами, например:
fn(); // I'm calling it
fn.call(); // I'm calling it
fn.apply(); // I'm calling it
Таким образом, различие является семантическим, но оба являются взаимозаменяемыми, ИМО. Кстати, я написал комментарий выше, по этому вопросу, и я хотел бы сказать это здесь, а именно:
ИМО, что вводит в заблуждение выражение. Возможно, есть некоторые признаки вызова/применения или что-то еще, но это совершенно сбивает с толку.
Ответ 2
Разница семантическая и тонкая. Когда вы вызываете функцию, вы прямо говорите ей, чтобы она запускалась. Когда вы вызываете функцию, вы позволяете ей что-то запускать.
Существует один способ вызова функции:
myFunction()
Здесь вы вызываете функцию (позволяя ей запускать), вызывая ее напрямую.
Существует много способов вызвать функцию (учитывая различные комментарии и ответы). Вот один пример:
function invoker(functionName) {
functionName()
}
invoker(myFunction)
Здесь, вызывая invoker
, вы вызываете myFunction
, который называется косвенно.
Ответ 3
Да, в большинстве случаев мы используем оба для ссылки на выполнение функции.
Есть 2 способа добраться до места B из вашего дома.
- Прямой/автоматический путь (Invoke), т.е. если вы выбираете первый путь, вам не нужно ходить. Кто-то автоматически доставит вас на место Б.
- Косвенный путь (Call), т.е. если вы выберете второй путь, вам нужно только добраться до A (пешком). В месте A кто-то есть, чтобы автоматически доставить вас к месту B.
Посмотрите на изображение ниже. Я думаю, что это очистит ваши сомнения.
В случае вызова вы изначально ссылаетесь на оператор, который фактически вызывает функцию.
В случае Invoking вы косвенно ссылаетесь на оператор вызова, чтобы фактически вызвать/запустить функцию.
Ответ 4
Многие люди используют термин "вызов и вызов", но это неправильно. Существует очень незначительная разница между вызовом и вызовом функции. В JavaScript функции могут быть вызваны без вызова, что означает, что код внутри тела функции может быть выполнен без создания object
для него. Он привязан к глобальному объекту. Когда нет отдельного объекта, значение this
связано с глобальным объектом.
Существует также разница между call
и apply
, основное отличие состоит в том, что call() принимает список аргументов, а apply() принимает один массив аргументов. Другой this
объект может быть назначен при вызове существующей функции. this
относится к текущему объекту, вызывающему объекту. При call
вы можете написать метод один раз, а затем наследовать его в другом объекте, не переписывая метод для нового объекта.
Таким образом, основное различие между вызовом и вызовом происходит с точки зрения this
объекта. Вызов позволяет установить this
значение, тогда как вызов просто связывает его с глобальным объектом.
Ответ 5
"function invoked" означает, что функция выполнена
"function called" означает, что функция была вызвана другой функцией, а затем выполнена
"функция, вызываемая без вызова" - это функция, которая сама вызвана, не будучи вызванной другой функцией
example of a self invoking function calling another function:
var f = (function() {
foo();
})(); ///() here means it self invoked -- without being called directly.
var foo = (function() {
///Do something here
});