【发布时间】:2010-02-05 12:51:43
【问题描述】:
当一个函数在JQuery中被链接时,操作的顺序是什么?
示例 1
$(selector).fun1(val,{fun2(){ }}
示例 2
$(selecter).fun1().fun2().fun3()
【问题讨论】:
当一个函数在JQuery中被链接时,操作的顺序是什么?
示例 1
$(selector).fun1(val,{fun2(){ }}
示例 2
$(selecter).fun1().fun2().fun3()
【问题讨论】:
从左到右。 fun3() 在fun2() 的结果(=返回值)上运行,fun2() 在fun1() 的结果上运行。
这种链接可以在 JQuery 中完成,因为每个可链接的函数都返回调用它的对象/元素。
所以$(selector).fun1() 在执行后返回$(selector) 元素。从返回的元素调用fun2(),依此类推。
【讨论】:
在这个例子中:
$(selector).fun1(val,{fun2(){ }}
函数一的第二个参数是callback function。这意味着 fun1 执行 THEN fun2 执行。
在这个例子中:
$(selecter).fun1().fun2().fun3()
如果所有函数都有持续时间(比如动画),它们会尽快启动。否则,它们按fun1、fun2、fun3 的顺序执行。
因此,对于动画,fun1、fun2 和 fun3 将是 3 个同时重叠的动画,但对于其他同步操作,它们只是按顺序发生。
【讨论】:
So with animations, fun1, fun2 and fun3 would be 3 simultaenous overlapping animations - 我认为你把这部分复杂化了一点。对于动画,实际函数仍然按顺序触发,但它们本身会使用回调函数创建间隔。由于 JS 是单线程的,所以函数不能异步运行。定时器与主线程分开计时,但是当主线程空闲时,它们的回调函数在主线程上运行。
【讨论】: