Вызов против вызова функции - программирование
Подтвердить что ты не робот

Вызов против вызова функции

До этого момента я думал, что "вызов" и "вызов" функции означает одно и то же. Однако в учебнике YouTube он сказал, чтобы вызвать функцию, вызвав ее. Моя первая мысль заключалась в том, что формулировка была ошибкой, но на странице W3Schools по функции Invocation она гласит:

Обычно используется термин "вызов функции" вместо "вызывать функцию"... В этом уроке мы будем использовать invoke, потому что функция JavaScript может быть вызвана без вызова.

Ладно, так что разница. Что это?

4b9b3361

Ответ 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 из вашего дома.

  1. Прямой/автоматический путь (Invoke), т.е. если вы выбираете первый путь, вам не нужно ходить. Кто-то автоматически доставит вас на место Б.
  2. Косвенный путь (Call), т.е. если вы выберете второй путь, вам нужно только добраться до A (пешком). В месте A кто-то есть, чтобы автоматически доставить вас к месту B.

Посмотрите на изображение ниже. Я думаю, что это очистит ваши сомнения.

IBwCQ.png

В случае вызова вы изначально ссылаетесь на оператор, который фактически вызывает функцию.

В случае 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
});