在js中 函数(funtion
)经常会被当作参数传入其他函数中:
如下:
<body>
<input type="button" value="click me" id="btn4">
<script>
var btn4 = document.getElementById("btn4");
btn4.addEventListener("click",hello1);
btn4.addEventListener("click",hello2);
function hello1() {
console.log("hello 1");
}
function hello2() {
console.log("hello 2");
}
</script>
在addEventListener函数中,hello1和hello2就被当作参数传入了,如果写成
btn4.addEventListener("click",hello1());
btn4.addEventListener("click",hello2());
会有什么不一样呢?
结果:
直接以hello
传入,点击事件正常运行,每次点击按钮,hello1()和hello2(),都会被触发,如果以hello()
传入,则页面加载时会触发一次,在后点击按钮时不触发事件。
结论:
将函数做为参数传递给另外一个函数时,该函数不用写括号,原因:如果写了括号,相当于把函数的执行返回结果,做为参数传入,而不是传入一个函数对象本身了。函数名如果带上()标识理解执行这个函数