Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript函数回调_Javascript_Angularjs_Cordova - Fatal编程技术网

javascript函数回调

javascript函数回调,javascript,angularjs,cordova,Javascript,Angularjs,Cordova,我正在与angularjs和phonegap合作,偶然发现这段代码,我“知道”它的功能,但我不知道它是如何工作的。我仍然对Advanced js概念感到满意,所以如果您能稍微描述一下,我会非常感激 问题: 在回调注册中,我没有看到在任何地方设置以下变量:arguments(第5行)和fn(第10行)。它们是否在函数原型中声明 第9行和第15行的代码块是否只是设置了“this”值,以便在回调中“this”值指向同一个对象?我们将这种应用“this”值的技术称为什么 是函数中始终可用的变量,是一个类

我正在与angularjs和phonegap合作,偶然发现这段代码,我“知道”它的功能,但我不知道它是如何工作的。我仍然对Advanced js概念感到满意,所以如果您能稍微描述一下,我会非常感激

问题:

  • 在回调注册中,我没有看到在任何地方设置以下变量:arguments(第5行)和fn(第10行)。它们是否在函数原型中声明

  • 第9行和第15行的代码块是否只是设置了“this”值,以便在回调中“this”值指向同一个对象?我们将这种应用“this”值的技术称为什么

  • 是函数中始终可用的变量,是一个类似数组的对象,包含传递给函数的所有参数。之所以使用
    Array.prototype.slice.call
    ,是因为
    arguments
    不是一个精确的数组(它是一个具有顺序数字键
    0
    1
    等的对象),而该代码是将其转换为真正的JavaScript数组的一种方法

    fn
    是传递到第2行函数中的参数,可用于第10行和第12行的内部函数,因为(内部函数可以访问其外部函数的所有变量,即使在外部函数返回后)

    对于使用
    this
    go进行的
    apply
    调用,您是正确的,因为它设置了调用函数的对象,从而设置了这些函数中this将引用的对象

    但是,需要注意的是,的值是动态的,在执行函数时确定,而不是在声明函数时确定。例如,在
    forEach
    循环中,
    this
    指的是全局对象(可能是预期的),而不是触发
    devicerady
    事件的对象。在最后一行中,
    this
    的值取决于整个
    phonegapReady
    回调的结果如何调用。

    是一个变量,在函数内部始终可用,是一个类似数组的对象,包含传递给函数的所有参数。之所以使用
    Array.prototype.slice.call
    ,是因为
    arguments
    不是一个精确的数组(它是一个具有顺序数字键
    0
    1
    等的对象),而该代码是将其转换为真正的JavaScript数组的一种方法

    fn
    是传递到第2行函数中的参数,可用于第10行和第12行的内部函数,因为(内部函数可以访问其外部函数的所有变量,即使在外部函数返回后)

    对于使用
    this
    go进行的
    apply
    调用,您是正确的,因为它设置了调用函数的对象,从而设置了这些函数中this将引用的对象

    但是,需要注意的是,的值是动态的,在执行函数时确定,而不是在声明函数时确定。例如,在
    forEach
    循环中,
    this
    指的是全局对象(可能是预期的),而不是触发
    devicerady
    事件的对象。在最后一行中,
    this
    的值取决于调用整个
    phonegapReady
    回调的结果

    
        myApp.factory('phonegapReady', function() {
            return function (fn) {
               var queue = [];
               var impl = function () {
                   queue.push(Array.prototype.slice.call(arguments));    
                };
    
                document.addEventListener('deviceready', function () {
                    queue.forEach(function (args) {
                        fn.apply(this, args);
                    });
                   impl = fn;
                }, false);
    
                return function () {
                     return impl.apply(this, arguments);
                };
            };
        });