这两个代码块之间的差异
Differences betwen these two blocks of code
为什么使用匿名函数的第一个块与使用命名函数的第二个块的工作方式不同?第一个块在"你好"answers"再见"之间变化,但第二个块没有。
1st——使用匿名函数:
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")。点击(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
对代码进行了一些改进。
请阅读解耦HTML、CSS和JavaScript。
Html:
<body>
<h1 class="js-say is-hello">
<span class="say say-hello">Hello</span>
<span class="say say-goodbye">Goodbye</span>
</h1>
</body>
CSS:
// any class with say should be hidden
.say {
display: none; }
// over-ride previous, if we're in an element of is-hello show say-hello
.is-hello .say.say-hello{
display: inline; }
// over-ride previous, if we're in an element of is-goodbye show say-goodbye
.is-goodbye .say.say-hello{
display: inline; }
jquery
$(".js-say").on('click', function () {
var $this = $(this);
$this.toggleClass('is-hello');
$this.toggleClass('is-goodbye');
});
.js-say
-现在是jquery的触发器。它与任何可能在元素上运行的CSS解耦。我在它前面加了js-
,这意味着它永远不应该有CSS规则,只应该用于javascript事件。
is-hello
&is-goodbye
-描述h1
元素的状态。它们帮助CSS显示或隐藏h1
中的元素。我从javascript中删除了HTML(去耦),我很少以这种方式使用javascript来更新HTML,因为很难弄清楚HTML是从谁和哪里更新的。
我个人的观点是不要使用.click()
,只使用更新且可扩展性更强的.on()
。toggleClass()
做它听起来像的事情,如果类存在,则删除它,如果不存在,则添加它。
当你放入sayHello()时,它使用执行sayHello的结果。相反,您应该做的是不带括号地传递sayHello,它表示函数本身
相关文章:
- 使用解析为javascript源的.php,如何使用条件语句将javascript代码封装在php括号之间
- 我如何知道js文件之间的javascript应用程序代码流
- 如何在城市和州代码之间用逗号将城市和州从短划线格式化为空格.(javascript)
- 在 JavaScript 中单击函数时两个日期类型输入之间的差异的代码
- 行之间有空格会影响 JavaScript 代码的性能吗?
- 如何使用angularJS在多个项目之间共享代码
- 创建在Javascript和PHP之间使用的唯一代码的最简单方法
- 在D3插件sankey.js和html代码之间定义源代码
- Node.js&两个请求之间的Express/Can上下文切换可以是同步代码
- 插件和现有jquery代码之间的冲突
- AngularJS控制器之间共享代码/方法/功能
- eval和setTimeout之间的差异执行字符串代码
- JavaScript-What'匿名函数和普通代码之间的区别是什么
- 两个代码之间的区别是什么(javascript的循环)
- 如何在两个大括号之间找到代码,尊重嵌套
- 代码在 Meteor 和 AngularJS 之间的可转移性如何
- 如何在标记之间获取代码
- 以下 2 段代码之间是否有实际区别
- 如何查看“”之间的代码
- 异步.js中第 169 行和第 171 行之间的代码块是什么意思