执行外部函数Vs。使用回调函数-何时使用一个或另一个?

问题描述 投票:0回答:1

据说,回调通过将回调函数的值(其函数定义)传递给“高阶”函数的参数,并在其中传递和执行,从而为高阶函数增加了功能。

似乎我们可以简单地通过从另一个执行函数中调用外部函数来完成相同的事情。

以下内容更好地说明了我想说的话。

// ************************使用回调******************* *********************************

function A() { // this is the callback function
    return 'hello';
};

function B(callback) { // this is considered a 'higher-order' function because it takes a
                       // function definition as a parameter. the function definition of A
                       // -- taken from A in Global memory -- is assigned to callback
    var output = callback(); // we call callback and run it
                             // the value of callback, is assigned to the variable output 
    console.log(output);
    console.log("goodbye")
};

B(A); // logs 'hello' 'goodbye'

// *******将上述内容与从另一个函数内部调用外部函数进行比较*****

function A() { 
    return 'hello';
};

function B() {
    var output = A(); // we call function A, from inside function B,
            // the value returned by A, is assigned to a variable inside B
    console.log(output);
    console.log("goodbye")
};

B(); // logs 'hello' 'goodbye'

虽然两者在返回值方面没有区别,但它们的执行方式也有所不同。

回调函数接受A的函数定义,并将其附加到名为callback的新名称上。回调已执行,并在回调的本地执行上下文中运行。

将此与我们从B内部调用A时发生的情况进行比较,A在其自身的本地执行上下文中执行。

也许这个例子太简单了,以至于看不到两者之间的差异,这有助于我理解何时将一个使用在另一个之上。

javascript function callback executioncontext
1个回答
0
投票

想象一下,有时将B传递给A,但其他时候传递了名为C的函数。如果B直接调用函数,则只能调用该函数。但是,如果传递了要调用的函数,则可以调用传递的任何函数:

function A() {
    return 'hello';
};

function C() {
    return 'Привет';
};

function B(callback) {
    var output = callback();

    console.log(output);
    console.log("goodbye")
};

B(A);
// => 'hello'
// => 'goodbye'
B(C);
// => 'Привет'
// => 'goodbye'

没有回调就不能这样做。

确实,这就是为什么参数通常具有强大功能的原因。将不同的参数传递给函数可以使代码以没有代码(或等效机制)无法实现的方式动态化。

© www.soinside.com 2019 - 2024. All rights reserved.