addLoadEvent 对此函数不太理解

harveymorning 2017-01-20 10:10:08
初学者在看JavaScript DOM这本书。
通常对于只有一个函数要使用到事件加载处理,
方法会是:
window.onload=func1


如果会有两个或则三个这类少量的函数需要事件加载处理,
方法会是:
window.onload=function(){
func1();
func2();
func3();
}


那么对于多个函数需要如此事件加载处理:
则是使用Simon Willison写的函数--addLoadEvent. 他的这个写法是下面这样,有几行代码不太理解, 请帮忙看下。
function addLoadEvent(func){
var oldonload=window.onload;
if (typeof window.onload!='function'){
window.onload=func;
}else{
window.onload=function(){
oldonload();
func();
}
}
}


疑问是:
我的理解和疑问, 因为在js里任何都是对象,那么第二行就是把window.onload作为对象存储在变量oldonload里。
接着第三行判断window.onload 是否已有函数赋给它了吗? 这里的疑问是可以用oldonload替换window.onload,既然它已经赋给了oldonload. 在这里还有个小疑问,function是作为关键字的理解吗?那样的话,可以以此"!=",则把函数参数直接赋予window.onload完事。

接下来的else嵌套里,为什么还需要oldonload(), 我的理解是匿名函数里的代码一执行的话,那么函数就创建了,并赋给了window.onload。事情这样就结束了。

我是初学者,请帮忙!先谢谢各位大侠了。
...全文
166 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
harveymorning 2017-02-25
  • 打赏
  • 举报
回复
谢谢你, jslang。 到今天才揭帖,哎!!。
天际的海浪 2017-01-20
  • 打赏
  • 举报
回复
第三行可以用oldonload替换window.onload typeof window.onload的结果是个字符串,说明window.onload的值是什么类型的、如果!="function"字符串,则把函数参数直接赋予window.onload。 else嵌套里,将匿名函数赋给了window.onload,这样就形成了一个闭包。因为有闭包的存在使得oldonload局部变量不会被系统销毁, 当window.onload事件触发时oldonload依然可以调用。 对于闭包的概念请自行百度

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧