我见过几个传递参数的java脚本函数示例,这些函数不在脚本中但是是隐式传入的。例如:
function myFunction(xml) {
var xmlDoc = xml.responseXML;
document.getElementById("demo").innerHTML =
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
}
" xml"定义还是列出?我在哪里可以找到其他隐含参数的列表?
我还看到了以下功能:
$("body").click(function (event) {
// Do body action
var target = $(event.target);
if (target.is($("#myDiv"))) {
// Do div action
}
});
" event"来自或列出?
提前致谢。
答案 0 :(得分:1)
这些变量称为(函数)参数。这是大多数编程语言的常见功能。它们使用函数定义,并且仅用作函数中定义的变量。它们不需要在以前的函数之外定义,因为它们仅存在于函数中。
我相信你很困惑,因为他们没有与var
一起宣布(因为他们不应该这样),因为你正在调用它们"隐式变量。 "但是,它们并不含蓄;它们是用函数定义的。
如果您使用的是像jQuery这样的库,可以通过查看函数的文档来查找函数的参数。例如,.click()
函数处理程序定义如下:
(如果您无法看到图片,则会显示.click(handler)
,其中handler
的类型为:Function(Event eventObject)
)
如您所见,它定义了函数参数eventObject
,您可以通过"传递"在你调用一个函数时。您可以使用任何有效的变量名来执行此操作。
有关参数的详情,请参阅this MDN documentation。
答案 1 :(得分:0)
function myFunction(xml) {
}
调用此myFunction的人将传递将保存到变量xml的详细信息。它是JS语言语法 - 与Java不同,您不需要在此定义变量类型。
同样,当你这样做时:
$("body").click(function (event) {
});
只要单击正文,JS就会在内部注册一个回调方法。它在内部将事件详细信息传递给函数。您可以执行console.log(event)
并查看其中列出的所有详细信息
答案 2 :(得分:0)
" xml"定义还是列出?我在哪里可以找到其他隐含参数的列表?
在函数定义中列出。当我定义一个函数时:
function greet( name , greeting ){
console.log('hi ' + name );
console.log(greeting);
}
name
和greeting
变量只是在函数定义的括号内定义。你可以调用该函数传递文字或变量:
greeting('peter' , 'have a nice day');
//or:
var name = 'Francisco';
var greeting = 'qué pasa hombre';
greet(name , greeting);
在第二个示例中,name
和greeting
变量恰好与内部函数参数一样被调用。这只是个案,也可以:
var theAame = 'Francisco';
var theGreeting = 'qué pasa hombre';
greet(theName , theGreeting);
并且工作方式完全相同。此外,在javaScript中,您可以将更多参数传递给函数,而不是函数中实际定义的参数,并使用arguments关键字或ES6 spread syntax访问它们。
这是javaScript的面包和黄油,任何关于参数和参数如何在javaScript中工作的搜索对您都有用。但是,你的第二个问题更棘手。
您还会询问此类代码:
$("body").click(function (event) {
// Do body action
var target = $(event.target);
if (target.is($("#myDiv"))) {
// Do div action
}
});
这类似,但也更复杂。这里$("body").click()
是一个带参数的函数。此参数恰好是另一个功能。这是某些语言不支持的功能,但在javascript中非常简单。你也可以用这种方式编写代码:
function reactToClick (event) {
// Do body action
var target = $(event.target);
if (target.is($("#myDiv"))) {
// Do div action
}
}
$("body").click( reactToClick );
但是,谁用reactToClick
参数调用event
函数?那么,在这种情况下,浏览器会这样做。
任何浏览器都有一些API可以使用函数回调注册到类似事件的事件,而$.click()
只是该机制的一些语法帮助。既然是最终调用该函数的浏览器,很难完全理解内部 - 我必须承认我不会 - 。
但是,您可以设置自己的非浏览器api依赖的javaScript代码来调用回调,并且参数设置和函数调用的工作方式相同:
function theCallback( name , options ){
console.log('Im a callback function fired by someCallbackRegister whenever its fire methods is called');
console.log('my callbackRegister name is: ' + name);
console.log('and the options provided in this call are: ' + options);
}
function someCallbackRegister( callback , registerName ){
return {
fire : function(options){
callback(registerName , options );
}
}
}
var listener = someCallbackRegister( theCallback , 'Johhny');
listener.fire({ foo : 'bar'});
在此示例中,listener
是theCallback
在fire
方法调用之后调用theCallback
,并将所有参数设置为event
函数正确,就像浏览器设法将$.click()
对象传递给您传递给<button type="button" class="icon fa fa-trash-o a-tabel" value="Submit" style="display:none;"></button>
jQuery(".a-tabel").click(function(e) {
e.preventDefault();
jQuery('#a').find('tr:last').remove();
jQuery('#zone-form').submit();
});
的回调函数一样。
希望这会有所帮助: - )
关于javaScript事件循环的PS:This video帮助我理解了浏览器api的工作原理。