pset8; CS50; JavaScript的;何时使用命名函数以及何时在回调中使用匿名函数

时间:2017-11-13 11:15:06

标签: javascript jquery cs50

在pset8中,我想出了当用户点击标记时显示信息窗口的2个解决方案。

 google.maps.event.addListener(marker, 'click', function() {
            showInfo(marker, articlesContent);
};

google.maps.event.addListener(marker, 'click', showInfo(marker, articlesContent));

为什么前者/后者工作或不工作?我的意思是showInfo也不是一个函数吗? 那为什么你需要提出另一个匿名函数来调用另一个函数?

道歉,如果这是一个新手的错误,但我对Javascript全新,并且已经为这个pset挣扎了几天。如果有人可以帮助我,我将不胜感激!

1 个答案:

答案 0 :(得分:3)

在第一种情况下,您将函数作为参数传递。在第二种情况下,您正在调用该函数。

第一种情况的例子:https://jsfiddle.net/anqpby6s/

document.getElementById("myBtn").addEventListener("click", function(){
    alert("Hello World!");
});

请注意,仅当您单击按钮时才会调用alert

第二种情况的例子:https://jsfiddle.net/bwsps4b8/

document.getElementById("myBtn").addEventListener("click", alert("Hello World!"));

请注意,代码运行时会立即调用alert - 您想要的内容。

你可以研究Javascript Callbacks进一步研究它,我在一篇快速搜索中找到了这篇深入的文章: http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/