以上代码是花瓣网书签工具的代码 求解惑
意思就是说首先 HUABAN_GLOBAL 不能是未定义状态, 如果是已定义状态 那么害得满足HUABAN_GLOBAL = {} 是一个引用对象,而不是其它的数据类型
HUABAN_GLOBAL 不是 {} 这个的话,给这个参数添加数学 比如 HUABAN_GLOBAL.name ="hello" 就会报错,方然这只是个例子
等价于 if ('undefined == typeof window.HUABAN_GLOBAL') { window.HUABAN_GLOBAL = {} }
&& 只有前面条件成立了才会执行后面代码, 这样写简洁点
问题一,函数自执行
(function () { /* code */ } ()); // 推荐使用这个
(function () { /* code */ })(); // 但是这个也是可以用的
// 由于括弧()和JS的&&,异或,逗号等操作符是在函数表达式和函数声明上消除歧义的
// 所以一旦解析器知道其中一个已经是表达式了,其它的也都默认为表达式了
// 不过,请注意下一章节的内容解释
var i = function () { return 10; } ();
true && function () { /* code */ } ();
0|| function () { /* code */ } ();
// 如果你不在意返回值,或者不怕难以阅读
// 你甚至可以在function前面加一元操作符号
!function () { /* code */ } ();
~function () { /* code */ } ();
-function () { /* code */ } ();
+function () { /* code */ } ();
问题二,逻辑运算符做短路效果,存在即执行后面代码,不存在不执行后面代码
fn && fn()
如果有这个函数就执行没有就不执行,防止没有这个函数的情况下执行这个函数报错
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
5 回答2.2k 阅读
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答843 阅读✓ 已解决
2 回答2k 阅读✓ 已解决
1.
!
是为了立即执行函数,也可以用+
之类的代替2.那个判断就是一段初始化逻辑,如果是
undefined
就执行后面一大段,否则略过