附在方法上?代码理解
attached to a method? code understanding
在我试图弄清楚的代码库中,我看到一个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附加东西的方式吗?
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;
所以javascript有一个名为anonymous function
的函数,不需要函数名。
基本上,它(在本例中)被用作参数的表达式。
以javascript函数setTimeout
为例
井setTimeout
可以将匿名函数作为其参数之一,即
var timer = setTimeout(function{
//do something
},
2000);
// setTimeout(function, time, paramters)
因此,您不必声明一个函数并将其作为参数传入
回到您的案例,您有一个匿名函数,它接受return1和return2
所以最终:
return1 = obj[key];
return2 = key;
相关文章:
- 有没有一种方法可以通过只引用JavaScript来执行代码
- 从window.onbeforeunload调用方法背后的代码
- 是否有一种方法可以使用公共代码库在Java和JavaScript中进行输入验证
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 我需要把createUser代码放在流星方法中吗
- 在 Javascript 中实现解耦代码/回调的正确方法是什么?
- 如何在jQuery.CSS()方法中为所有浏览器编写CSS代码
- 角度方法返回未绘制的代码
- 使用ScriptManager.RegisterStartupScript从代码隐藏调用javascript方法
- 崇高的jslint:任何忽略特定代码段的方法
- 有没有更好的方法来编写这个Show/hide JQuery代码
- 在我的代码中管理大量硬编码数据的最佳方法
- 需要减少用于获取日期格式的javascript方法代码
- 通过找到一种删除许多 if 语句的方法来简化代码
- 使用each()方法来动画化代码类型
- 我可以替换“;获取“;方法用“;POST”;代码库中的任何位置
- AngularJS控制器之间共享代码/方法/功能
- 如何确定字符串是否为代码方法
- 使用razor在javascript中调用带有参数的c#代码方法
- 如何从javascript调用服务器端类代码方法