2015-08-26 14 views
4

我不明白关于参数的JavaScript代码的某些部分。我发现这个W3Schools的例子:更好的理解JavaScript参数

<!DOCTYPE html> 
<html> 
<body> 

<a id="myAnchor" href="http://w3schools.com/">Go to W3Schools.com</a> 

<p>The preventDefault() method will prevent the link above from following the URL.</p> 

<script> 
document.getElementById("myAnchor").addEventListener("click", function(event){ 
    event.preventDefault() 
}); 
</script> 

</body> 
</html> 

我很困惑与内部功能event参数。虽然event参数没有成为参数,但该代码仍有效,即它没有任何值。这个“空白”参数如何与一个方法一起使用。为什么这个代码有效?我是JavaScript新手,所以任何简单的答案将不胜感激。

+0

当浏览器调用该函数时,它会传入一个参数值。 – Pointy

+0

@Pointy:有什么价值? – Slit

+0

浏览器将传入一个事件对象。该代码设置了一个事件处理程序。 – Pointy

回答

0

狭缝,

这被称为上的功能“点击”事件是一个“回叫”功能。一旦事件“点击”提出,那么“function(event){”的匿名“回叫”函数将立即被1个参数“event”调用。为了确定将与你一起调用的匿名函数的参数应该参考文档。 找到参数后,你可以在这个函数中使用和使用它们,例如添加“event.preventDefault(); alert('test')”,当你点击元素时不会发生任何事情,只有弹出窗口和“测试“将会出现。

不要犹豫,问任何问题,这样我就可以改善我的答案..只是尝试在高层次解释。

+0

我想我明白了。 Word“事件”获取值“点击”,因为这是addEventListener的工作方式。如果它是“双击”,那么单词“事件”将具有该值。我很难阅读JavaScript手册,我不明白解释。在Mozilla的页面上,它说event.preventDefault(),我不明白这个“事件”的含义。就像我总是混淆了一些“元素”,“HTMLElement”,“节点”或“对象”。 – Slit

+0

狭缝,不完全。当事件“点击”提出时,则使用“事件”对象作为参数调用匿名函数。这不是一个字或字符串或其他...这是一个对象。使用这个对象可以控制点击事件发生时应该发生的事情。正如我在我的回答中所提到的,您可以防止所有通常会发生的默认“事情”。例如,当您点击链接时,您将被重定向到URL,当您单击“提交”时,则表明您正在提交表单..或者你可能只是“附加”默认的“东西”你的具体逻辑,如显示弹出“测试”。 –

+0

但是这个'事件'不是记忆词,因为我可以将它改为'XYZ',它可以工作。 – Slit

0

此功能也称为回调。回调是将一个函数作为参数传递给另一个函数的时候。

尝试测试此代码,然后点击页面上的任何地方:

window.addEventListener("click", click); 

function click() { 
    console.log(arguments); 
} 

如果你打开控制台,你应该看到[MouseEvent]。特殊的arguments对象返回该函数接收的所有参数。 click函数只收到一个参数MouseEvent,因为窗口方法addEventListener将事件发送到事件处理程序。

这里有一个类似的例子:

init("abc", logArgs); //--> "abc" 
init("abc", logDog); //--> "dog" 

function logArgs(x) { 
    console.log(x); 
} 

function logDog(x) { 
    console.log("dog"); 
} 

function init(x, callback) { 
    callback(x); 
} 

你的例子混乱的部分是,你可以发送功能的匿名函数。匿名函数是一个没有命名的函数。使用上面的例子,你可以这样做:

init("abc", function(y) { //the y parameter comes from the init function 
    console.log(y); //"abc" 
}); 

function init(x, callback) { 
    callback(x); //send the first argument to the anonymous function 
}