Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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
Angularjs 附属于一种方法?代码理解_Angularjs_Javascript - Fatal编程技术网

Angularjs 附属于一种方法?代码理解

Angularjs 附属于一种方法?代码理解,angularjs,javascript,Angularjs,Javascript,在我试图找出的代码库中,我看到一个js文件(myloopfile.js)被导入到另一个js文件中。我试图弄明白这里使用的一些代码 这是myloopfile.js function method1(value) { // return something } var myLooper = function (obj, iterator, context) { var key; if (obj) { if (typeof obj === 'function

在我试图找出的代码库中,我看到一个js文件(myloopfile.js)被导入到另一个js文件中。我试图弄明白这里使用的一些代码

这是myloopfile.js

function method1(value) {
    // return something 
}

var myLooper = function (obj, iterator, context) {
    var key;
    if (obj) {
        if (typeof obj === 'function') {
            for (key in obj) {
                if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
                    iterator.call(context, obj[key], key);
                }
            }
        } else if (obj.forEach && obj.forEach !== forEach) {
            obj.forEach(iterator, context);
        } else if (isArrayLike(obj)) {
            for (key = 0; key < obj.length; key++)
                iterator.call(context, obj[key], key);
        } else {
            for (key in obj) {
                if (obj.hasOwnProperty(key)) {
                    iterator.call(context, obj[key], key);
                }
            }
        }
    }

    return obj;
};
我想知道这是在哪里

function(return1, return2) {
        //do something else
});

来自哪里?我在那个文件中没有看到任何东西表明它附加了一个方法。参数return1和return2来自哪里?这是javascript附加东西的方式吗

因此javascript具有名为
匿名函数的函数,该函数不需要函数名

基本上,它(在本例中)用作参数的扩展

例如,javascript函数
setTimeout

那么
setTimeout
可以将匿名函数作为其参数之一,即

var timer = setTimeout(function{
                          //do something
                         },
                       2000); 

 // setTimeout(function, time, paramters)
因此,您不必声明函数并将其作为参数传入

回到您的案例,您有一个匿名函数,它接受return1和return2

因此,最后:

  return1 = obj[key];
  return2 = key;
你通过:

looper({
    loop1: function(Home) { //do something },
    loop2: function(Home) { //dosomething }
}, function(return1, return2) {
    //do something else
});
所以

Function.prototype.call()
方法使用给定的
此值和单独提供的参数调用函数。因此,在迭代器函数中:

this = context;
return1 = obj[key];
return2 = key;

如果我在做looper({loop1:function(Home){//dosomething},loop2:function(Home){//dosomething},function(return1,return2,return3){//dosomething});我在undefined中得到了return3…在您的解释中,似乎我应该有三个可用的,context,obj[key]和keyNo,因为
.call
将第一个参数设置为
this
啊…好的。。。然后文件myloopfile.js看起来只是一堆方法。。。那么这个语法looper({loop1:function(Home){//do something},loop2:function(Home){//dosomething})是如何执行的……我的意思是,我看到它需要3个参数,但这就是它在创建looper“object”时执行的
looper
是一个函数,所以你只需调用它。你没有指定第三个参数,所以
context
是未定义的。这就是我困惑的地方。在哪里定义了return1和return2…为什么我不能做return1,return2,return3…?在
var myLooper=function(obj,迭代器,context)
obj是函数
loop1,loop2
,迭代器是函数
函数(return1,return2,)
,上下文是
return1,return2
这一切都只是语法问题
looper({
    loop1: function(Home) { //do something },
    loop2: function(Home) { //dosomething }
}, function(return1, return2) {
    //do something else
});
obj = {
    loop1: function(Home) { //do something },
    loop2: function(Home) { //dosomething }
}
iterator = function(return1, return2) {
    //do something else
}
this = context;
return1 = obj[key];
return2 = key;