当前位置:  开发笔记 > 编程语言 > 正文

更好地理解JavaScript中的回调函数

如何解决《更好地理解JavaScript中的回调函数》经验,为你挑选了5个好方法。

我理解将一个函数传递给另一个函数作为回调并让它执行,但我不理解这样做的最佳实现.我正在寻找一个非常基本的例子,像这样:

var myCallBackExample = {
    myFirstFunction : function( param1, param2, callback ) {
        // Do something with param1 and param2.
        if ( arguments.length == 3 ) {
            // Execute callback function.
            // What is the "best" way to do this?
        }
    },
    mySecondFunction : function() {
        myFirstFunction( false, true, function() {
            // When this anonymous function is called, execute it.
        });
    }
};

在myFirstFunction中,如果我确实返回了新的callback(),那么它可以工作并执行匿名函数,但这对我来说似乎不是正确的方法.



1> krosenvold..:

你可以说

callback();

或者,call如果要调整this回调中的值,可以使用该方法.

callback.call( newValueForThis);

函数内部this将是任何东西newValueForThis.



2> arunjitsingh..:

您应该检查回调是否存在,并且是可执行函数:

if (callback && typeof(callback) === "function") {
    // execute the callback, passing parameters as necessary
    callback();
}

许多库(jQuery的,道场等)的使用为他们的异步函数类似的模式,以及用于node.js的所有异步函数(通常的NodeJS传递errordata回调).查看他们的源代码会有所帮助!



3> Ionuț G. Sta..:

执行函数有三种主要可能性:

var callback = function(x, y) {
    // "this" may be different depending how you call the function
    alert(this);
};

    回调(argument_1,argument_2);

    callback.call(some_object,argument_1,argument_2);

    callback.apply(some_object,[argument_1,argument_2]);

您选择的方法取决于:

    您将参数存储在Array中或作为不同的变量.

    您想在某个对象的上下文中调用该函数.在这种情况下,在该回调中使用"this"关键字将引用在call()或apply()中作为参数传递的对象.如果您不想传递对象上下文,请使用null或undefined.在后一种情况下,全局对象将用于"this".

Function.call, Function.apply的文档



4> annakata..:

回调是关于信号的,而"新"是关于创建对象实例.

在这种情况下,执行"callback();"会更合适.比"返回新的回调()"因为你没有做任何带有返回值的事情.

(并且arguments.length == 3测试真的很笨重,fwiw,更好地检查回调参数是否存在并且是一个函数.)



5> 小智..:

适当的实施将是:

if( callback ) callback();

这使得回调参数可选..

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有