2015-08-26 43 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 
}