Javascript 调用与调用函数

Javascript 调用与调用函数,javascript,Javascript,到目前为止,我认为“调用”和“调用”函数的含义是相同的。然而,在YouTube教程中,它说通过调用函数来调用函数。我的第一个想法是,措辞是错误的,但在W3Schools的函数调用上,它说: 通常使用术语“调用函数”而不是“调用函数” 功能“。。。在本教程中,我们将使用invoke,因为 JavaScript函数可以在不被调用的情况下被调用 好吧,这是不同的。它是什么?“调用的函数”表示已执行的函数 “函数调用”是指一个函数被另一个函数调用,然后执行 “未调用而调用的函数”是一个自调用而未被另一个

到目前为止,我认为“调用”和“调用”函数的含义是相同的。然而,在YouTube教程中,它说通过调用函数来调用函数。我的第一个想法是,措辞是错误的,但在W3Schools的函数调用上,它说:

通常使用术语“调用函数”而不是“调用函数” 功能“。。。在本教程中,我们将使用invoke,因为 JavaScript函数可以在不被调用的情况下被调用

好吧,这是不同的。它是什么?

“调用的函数”表示已执行的函数

“函数调用”是指一个函数被另一个函数调用,然后执行

“未调用而调用的函数”是一个自调用而未被另一个函数调用的函数

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
});

区别在于语义和微妙。当你调用一个函数时,你直接告诉它运行。当你调用一个函数时,你是在让某些东西运行它

有一种方法可以调用函数:

myFunction()
在这里,您通过直接调用函数来调用函数(让它运行)

调用函数的方法有很多(在不同的注释和答案中给出)。这里有一个例子:

function invoker(functionName) {
  functionName() 
}

invoker(myFunction)

在这里,通过调用
invoker
,您正在调用被间接调用的
myFunction

许多人交替使用术语调用和调用,但这是不对的。调用和调用函数之间有一个非常细微的区别。在JavaScript中,函数可以在不被调用的情况下被调用,这意味着函数体中的代码可以在不为其创建
对象的情况下执行。它绑定到全局对象。当没有单个对象时,
this
的值与全局对象相关联

call
apply
之间也有区别,根本区别在于call()接受参数列表,而apply()接受单个参数数组。调用现有函数时,可以分配不同的
对象
引用当前对象,即调用对象。使用
call
,您可以编写一次方法,然后在另一个对象中继承它,而无需为新对象重写方法

因此,调用和调用之间的主要区别在于
this
对象。调用让您设置
值,而调用只会将其绑定到全局对象。

您的引用文本:

通常使用术语“调用函数”而不是“调用函数” 功能“。。。在本教程中,我们将使用invoke,因为 JavaScript函数可以在不被调用的情况下被调用

现在让我重新表述一下:

通常使用术语“调用函数”而不是“调用函数” 功能“。。。在本教程中,我们将使用术语invoke而不是call,因为 JavaScript函数可以像
fn.call()
fn.apply()
那样间接调用,而不需要像
fn()
那样直接调用

因此,当我执行
fn()
时,它被直接调用;当我执行类似
fn.call()
的操作时,它被间接调用,但在这两种情况下,函数都被调用。否则,我看不出这里有什么不同,我也可以说我可以用多种方式调用函数,例如:

fn(); // I'm calling it
fn.call(); // I'm calling it
fn.apply(); // I'm calling it
所以,区别是语义上的,但两者都是可互换的。顺便说一句,我在上面的问题下写了一条评论,我想把它放在这里,就是:


依我看,这是一个误导性的说法。也许有一些迹象表明 打电话/申请或其他事情,但这完全令人困惑


是的,在大多数情况下,我们使用两者来表示函数的执行

有两种方法可以从你的家到达地点B

  • 直接/自动方式(调用),即如果选择第一种方式,则无需步行。有人会自动将您带到位置B
  • 间接方式(呼叫),即如果选择第二种方式,您只需步行到达A。有人在地点A自动将您带到地点B
  • 请看下图。我想这会消除你的疑虑

    在调用
    的情况下,您最初引用的是实际调用函数的语句


    在调用
    的情况下,您可以间接引用调用语句来实际调用/运行函数。

    似乎是一个灰色区域,但“invoke”表示某种程度的间接性。因此,您可以考虑通过<代码>新< /代码>(例如<代码>新神话()>代码>)实例化为调用而不是调用。使用
    .call
    .apply
    也可以被视为调用,而不是调用。但是W3Schools坚持在任何地方使用“invoke”对我来说都是非常不自然的。。。我想解释一下。。。我做过的最好的事情就是得到了一个阻止W3Schools的扩展。我不知道W3Schools是否还相关——我记得我在这里的第一个答案中链接到了一个W3Schools页面——接待是coldIMO,这是一个误导性的说法。也许有一些调用/应用或其他的指示,但这完全让人困惑。@Jordan s你是明智的。“函数调用”意味着一个函数被另一个函数调用,然后执行-你从哪里得到这个区别?我不确定我是否完全理解这个问题。被另一个函数调用的函数特别意味着……我刚刚添加到上面的示例中。-自调用函数——调用函数foo注意,没有任何函数调用函数fb,但是您可以在没有其他函数的情况下调用函数