缺少分号导致IIFE失效
正文
先来看这两段代码, 执行之后可以看到控制台爆出log.(...) is not a function
的错误异常信息。
1 | window.onerror = undefined; |
万物皆对象, 函数也是对象。
所以函数也可以返回函数, 做到fun(arg1)(arg2)(arg3)
这种奇葩的语法。
我们再把第一种缺少分号的函数换个写法, 这两种写法是等价的。
1 | $(function () { |
我们预想的执行方式截然不同。console.log()
和匿名函数变成了一条语句。
即使是使用了'use strict';
也不会在写代码的时候报错。
所以不要太过于依赖没有分号。
结合window.onerror造成更大杀伤力
第一行我加上了window.onerror = undefined;
。
因为项目上使用了开普云的一个js
脚本。
1 | <script type="text/javascript" charset="utf-8" id="kpyfx_js_id_10000077" src="//fxsjcj.kaipuyun.cn/count/10000077/10000077.js"></script> |
这个js
没有详细去看, 因为压缩混淆过了。
但是我知道的是, 它拦截了异常报错信息, 导致控制台无法正常提示错误, 拖住我好久(生气
1 | window.onerror = function(url, error, line, column) { |
所以我在第一行加上了window.onerror = undefined;
(或者null
)。
因为我在浏览器控制台输入window.onerror
, 返回的是null
。