在我想弄清楚的代码库中,我看到一个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;
};
..........................................................................................。
myloopfile.js中的myLoop就像这样调用
var looper = require(‘../myloopfile.js);
looper({
loop1: function(Home) { //do something },
loop2: function(Home) { //dosomething }
}, function(return1, return2) {
//do something else
});
我想找出这个
的位置function(return1, return2) {
//do something else
});
来自哪里?我没有看到该文件中的任何内容表明附加了一个方法。参数return1和return2来自哪里?这是一些附加东西的javascript方式吗?
答案 0 :(得分:1)
因此,javascript具有名为anonymous function
的函数,不需要函数名称。
基本上它(在这种情况下)用作扩展参数的一种方式。
以javascript函数setTimeout
好setTimeout
可以将匿名函数作为其参数之一,即
var timer = setTimeout(function{
//do something
},
2000);
// setTimeout(function, time, paramters)
因此,您不必声明函数并将其作为参数传递
回到你的情况,你有这个匿名函数,它接受return1和return2
所以最后:
return1 = obj[key];
return2 = key;
答案 1 :(得分:1)
var myLooper = function (obj, iterator, context) {
/* .... */
iterator.call(context, obj[key], key);
/* .... */
};
你通过:
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
}
Function.prototype.call()
方法调用具有给定this
值的函数和单独提供的参数。因此,在你的迭代器函数里面:
this = context;
return1 = obj[key];
return2 = key;