这段js写法求解

clipboard.png

以上代码是花瓣网书签工具的代码 求解惑

阅读 3.6k
6 个回答

1.!是为了立即执行函数,也可以用+之类的代替
2.那个判断就是一段初始化逻辑,如果是undefined就执行后面一大段,否则略过

意思就是说首先 HUABAN_GLOBAL 不能是未定义状态, 如果是已定义状态 那么害得满足HUABAN_GLOBAL = {} 是一个引用对象,而不是其它的数据类型

HUABAN_GLOBAL 不是 {} 这个的话,给这个参数添加数学 比如 HUABAN_GLOBAL.name ="hello" 就会报错,方然这只是个例子

等价于 if ('undefined == typeof window.HUABAN_GLOBAL') { window.HUABAN_GLOBAL = {} }
&& 只有前面条件成立了才会执行后面代码, 这样写简洁点

如果window.HUABAN_GLOBAL这个全局变量没有定义,那么就初始化后面这一大坨

函数放!是提高优先级吧, && 及 || 是短路运算, A&&B=>A真执行B; A||B=>A假执行B

问题一,函数自执行

(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()
如果有这个函数就执行没有就不执行,防止没有这个函数的情况下执行这个函数报错
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题