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