为什么使用匿名函数的第一个 block 与使用命名函数的第二个 block 的工作方式不同?第一个 block 在“Hello”和“Goodbye”之间变化,但第二个 block 没有变化。
第一个 - 使用匿名函数:
function sayGoodbye() {
$("#title").html("Goodbye");
$("#title").click(function () {
$("#title").html("Hello");
$("#title").off("click");
});
};
第二 - 使用命名函数:
function sayGoodbye() {
console.log("goodbye");
$("#title").html("Goodbye");
$("#title").click(sayHello());
};
function sayHello() {
console.log("hello");
$("#title").html("Hello");
$("#title").off("click");
}
HTML:
<head>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
</head>
<body>
<h1 id="title" onclick="sayGoodbye();"> Hello </h1>
</body>
最佳答案
$("#title").click(sayHello()); 使用:
$("#title").on("click", sayHello);
(或... $("#title").click(sayHello);
)
你应该分配一个sayHello
,而不是执行sayHello()
function sayGoodbye(){
console.log("goodbye");
$("#title").html("Goodbye");
$("#title").click(sayHello);
};
function sayHello() {
console.log("hello");
$("#title").html("Hello");
$("#title").off("click");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1 id="title" onclick="sayGoodbye();"> Hello </h1>
这是关于切换两种状态或两个功能的另一篇精彩读物:
https://stackoverflow.com/a/21520499/383904
关于javascript - 这两个代码块之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34169224/