Javascript参数对象
Javascript arguments object
我很难理解arguments对象。在这段代码中,参数将关注什么函数?
getAjax('get_info', 'java_array', realVarName, cld.listArray, 0, '',
'no_restrict', function() {
show_list(arguments[0], sld);
if (typeof(postFunc) == "function") {
postFunc();
}
});
"arguments"是一个具有任何函数的继承变量。它包含传递给函数的所有参数。例如,函数定义可能不列出任何参数,但调用可能包含"n"个参数。然后,函数仍然可以通过参数数组访问所有参数。
在您的代码中,arguments[0]
将主要是undefined
首先,arguments
是一个对象,表示传递给当前函数的参数集。它自动存在于每个函数内部。你可以在MDN上阅读更多关于它的信息。
因此,在您的情况下,arguments[0]
将是getAjax()
传递给回调的第一个参数,而回调是您调用getAjax()
时传递给它的最后一个参数。因此,这取决于getAjax()
的内部行为,而您没有向我们展示。
让我们来了解一下您的代码是如何工作的:
- 您可以对
getAjax()
进行函数调用,并向其传递一些参数 - 其中一个参数是回调函数(最后一个参数)
- 当
getAjax()
执行其工作时,它将在某个时刻调用该回调函数 - 当它调用回调函数时,它可以向回调传递一些参数
- 在该回调函数中,
arguments
对象将表示getAjax()
传递给它的任何参数 - 因此,当(在回调函数中)获得
arguments[0]
并将其传递给show_list()
时,将传递getAjax()
传递给回调的第一个参数
您可以在不使用arguments
对象的情况下重写代码,只需为回调声明一个命名参数:
getAjax('get_info', 'java_array', realVarName, cld.listArray, 0, '',
'no_restrict', function(obj) {
show_list(obj, sld);
if (typeof(postFunc) == "function") {
postFunc();
}
});
在这个替代实现中,将回调函数的第一个参数命名为obj
,并直接使用它,而不是使用arugments[0]
。您的实现和这两者都会产生相同的结果。
当您知道要将哪些参数传递给函数时,通常最好使用命名参数(如我的替代实现中的obj
),因为这会使代码更加自我文档化。但是,当您不知道将有多少参数传递给一个函数,或者当您想将传递给您的函数的任何参数传递给其他函数(转发或代理)时,arguments
对象可能特别有用。
相关文章:
- JS for循环来设置HTML对象参数
- 如何在使用javascript加载页面时直接设置对象参数
- 如何将对象参数传递给事件处理程序
- 在ng重复中剪切对象参数的字符串长度
- 在新对象参数中使用“this”选择器
- 在 javascript 中通过引用传递一个对象参数
- 为什么 Javascript 中的参数在使用 console.log 时返回 [对象参数]
- 如何使用 javascript 访问在函数中传递的对象参数
- 在哪里可以获得有关 JavaScript 函数的对象参数语法的信息
- JavaScript 对象参数在通过网络读取时更改
- 我正在寻找一种智能方法来检查传递给函数的对象参数
- 使用来自另一个函数的对象参数调用函数
- Javascript中的对象参数,以及我们应该如何命名它们
- Jquery 在 Firefox 中的自定义对象参数(动态导航加载动态内容)
- 有效记忆对象参数
- AngularJS v1.2.x $digest() 无限循环指令隔离范围对象参数
- 在 Jasmine 中执行有关对象参数的断言
- Jquery - 编辑对象参数
- 检查对象参数是否具有所有必需属性的最有效方法是什么
- Javascript对象参数的分配和使用