[JavaScript] 判断 if(function(){}) 什么意思?有什么用?

2013-05-30 13:24:10 +08:00
 andybest
看到一代码,无覆盖载入window.onload:
windows.onload = function(){
alert(1);
}
windows.onload = (window.onload||function(){}).after(function(){
alert(2);
})


第二个逻辑里的:
windows.onload = (window.onload||function(){})...

这里为什么要判断function(){}?这个是什么意思?什么情况下会返回false?
3883 次点击
所在节点    问与答
12 条回复
chuhades
2013-05-30 13:29:16 +08:00
js 不是懂太多...
这个的意思应该是如果window.onload 不为空就把window.onload 赋给window.onload,
如果为空就把一个空的function 赋给window.onload。
andybest
2013-05-30 13:30:17 +08:00
@chuhades 不是吧? || 是或的意思啊
Mutoo
2013-05-30 13:31:53 +08:00
好眼熟,这不是腾讯前端发的那个日志吗……

1) 在javascript里 0, null, undefined 都返回false

2) || 条件语句返回从左往右第一个不为false的对象

所以 windows.onload = (window.onload||function(){}) 的意思是:如果window.onload未定义,就取 function(){} (空函数)
chuhades
2013-05-30 13:32:20 +08:00
@andybest 你可以测试下:
var a;
b = (a || function(){alert(1)})
b()
chuhades
2013-05-30 13:33:32 +08:00
3 楼很详细~
andybest
2013-05-30 13:43:59 +08:00
@Mutoo
@chuhades

谢谢,是我理解错了,原来在javascript里:

v = (a||b);
与:
v =(a?a:b);

这两行执行结果是一样的?
Mutoo
2013-05-30 13:45:01 +08:00
@andybest 哈哈,js里面,还有呢,取两数较小数可以这样写 a<b&&a||b
zhttty
2013-05-30 13:49:15 +08:00
首先你得windows是错的;
改了window则返回1;
andybest
2013-05-30 14:07:59 +08:00
@Mutoo 这种写法真是反人类啊
reyrey
2013-05-30 18:25:23 +08:00
那为什么后面缀上.after 啥的
ijse
2013-05-30 18:52:40 +08:00
嗯,, 前端 AOP。

把window.onload赋值为function(){}, 是为了使用之前添加到Function.prototype的before(), after()
chrisyipw
2013-05-30 19:51:40 +08:00
@andybest 虽然不好理解,但是习惯了觉得写起来很爽,不需要跟着规章制度走。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/70641

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX