大家最喜欢的:概念视频时间!回调函数是 JavaScript 中一个重要的概念。它们是在某个动作完成运行后被调用的函数。它们为我们的代码提供了结构和时间安排。
以我们上个视频中使用的动画为例。动画需要时间才能运行。如果想在动画结束后立即发生其他事情,该怎么办?是否必须使用与动画时长相同的 setTimeout
?不需要。jQuery 为我们提供了专门用于此目的的回调函数。
它们通常是我们传递给方法的额外参数。在动画的情况下,我们将一个函数作为最后一个参数传递。这就是回调函数,它将在动画完成后被调用。
$("#element").animate({
// stuff to animate
}, function() {
// callback function
});
这看起来可能有点奇怪,但本质上我们只是在做
.animate(a, b)
其中 a
是一个属性和值的集合,b
是一个回调函数。
但我们从上一个视频中知道,动画也可以接受一个指定动画持续时间的定时参数。这个参数放在哪里?它是一个可选参数,就像回调函数一样。如果想使用它,我们会把它放在中间,所以本质上是
.animate(propertiesObject, duration, callback);
还有一个可选参数,我们可以传递一个字符串来指定缓动值。
.animate(propertiesObject, duration, easing, callback);
jQuery 恰好很酷也很聪明,可以处理这些可选参数。如果省略中间两个参数,只传递回调函数,它可以识别出你传递的是一个函数,而不是一个数字或字符串,所以它知道你指的是回调函数。你不需要传递任何虚假的值。这仅仅是良好的 API 设计!
当你查看jQuery 文档时,它们会这样显示
.animate( properties [, duration ] [, easing ] [, complete ] )
然后在后面解释预期类型。
但无论如何,回到回调函数。你可以嵌套得很深。想象一下在回调函数中放置另一个动画,并且该动画有自己的回调函数。这是完全合理的,因为你可能想要做一个多步骤的动画。你只需要保持条理清晰。
查看 CodePen 上 Chris Coyier 的作品 450c5810be27a9a8946cb8012cbd1213(@chriscoyier)。
这里我们只是使用动画作为示例。也许回调函数更常见的用法是 Ajax。Ajax 是浏览器在不刷新页面的情况下调用另一个资源的情况。这可能需要完全未知的时间。这取决于带宽、延迟、文件大小、错误条件以及各种其他因素。在获得任何回复或其他更多信息之前,你可能无法对该 Ajax 请求做任何事情。回调函数非常适合这种情况,我们将在后面详细介绍。
在这个视频中,代码对我来说很模糊。
1+
没有高清选项
我重新上传了,希望它会更好。
我可能错了 - 但我认为在这些函数声明后面不需要分号 - 但如果你使用的是函数表达式,即变量,则需要使用分号。
是这样吗?
像这些吗?
我认为它是可选的。ASI(自动分号插入)会在解析时为你处理它,但无论如何,最好自己做,并可能避免将来遇到一些麻烦。
嗯,那些不是 - 因为它们出现在右括号后面。函数声明后面的那些,因为没有括号...
这是我的理解。
函数声明
函数表达式
我认为这是我在我的那本又厚又无聊的 JavaScript 书中读到的。就所有意图和目的而言,我都是新手,所以我的理解可能不正确。
更大的重点是,无论你是否为函数声明添加分号,它都能工作,这显然是最重要的 - 即它不会产生错误 - 所以无论如何我学到了一些东西。
鉴于这是一个非常微不足道的点,我只是想对你小屋课程,尤其是这个课程提供一些反馈。你对哪些概念和工作流程重要,哪些不重要有很好的理解,并且你在实践和理论之间取得了很好的平衡,这是我在观看的其他任何课程中都没有找到的。
我还没有真正将我的 JavaScript 技能用于实际用途,但计划将来使用 - 但我对语法和所有这些很棒的东西都有很好的理解。
期待你接下来会推出什么 - 你现在有一个很好的流程,所以我希望你能继续推出它们!
(本来想添加一张图片来演示我所指的部分,但不太清楚如何操作),但它在视频的 4:00 处。再次强调,这是一个非常微不足道的点,我相信你还有更重要的事情需要考虑!)
更正了一个错别字。
http://stackoverflow.com/questions/11978698/do-we-need-a-semicolon-after-function-declaration
仅供其他偶然发现并好奇的人参考。
观看这段屏幕录制后,我体验到了一个 jQuery/JavaScript 的顿悟时刻!
它终于开始逐渐明朗了。谢谢,很棒的内容
页面需要更新以适应 Promise 时代。
精彩且非常有趣。不错! :)))
嘿 Chris,我一直在关注你的学习 jQuery 系列。我是你的忠实粉丝。我观看了视频教程,在 3:03 处,你提到在处理嵌套回调时,开发人员需要运用自己的组织技能来解决由一个接一个嵌套回调导致的不一致代码问题。我非常同意你的观点。非常感谢你提供如此有价值的内容。