我们的代码在部署在线上之前,都要进行打包,打包之后的代码都是一段压缩之后的代码。可能有人会问了,这跟这篇文章的主题有什么关系呢?先别急,我们先看一下打包之后,开头的这段代码:
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.anyizbrecord=e():t.anyizbrecord=e()}
上面压缩的代码看着费劲,那我把代码展开一下
!function(t, e) {
"object" == typeof exports && "object" == typeof module ?
module.exports = e() :
"function" == typeof define && define.amd ?
define([], e) :
"object" == typeof exports ?
exports.anyizbrecord = e() :
t.anyizbrecord = e()
}(window,(function(){})())
可以看到里面有“很多”三元表达式。这就引出我们这篇文章的主题了。
我们先看一下三元的用法:
1、基本语法:
条件 ? 表达式1 : 表达式2
含义:条件为 true ,执行表达式1,为 false 执行表达式2
2、多条件运算
条件1 ? 表达式1 : 条件2 ? 表达式2 : 条件3 ? 表达式3 : 表达式4
含义:当条件1为true执行表达式1,条件1返回false,执行条件2,条件2返回false,执行条件3,条件3如果返回true,则执行表达式3,否则执行表达式4,以此类推。(当然这种方式也可以通过 if() else if() else() {} 来实现,多条件运算显得更简洁)
结合多条件运算我们分析一下这段代码
!function(t, e) {
"object" == typeof exports && "object" == typeof module ? 条件1 // commonjs规范
module.exports = e() : 表达式1
"function" == typeof define && define.amd ? 条件2 // AMD 规范
define([], e) : 表达式2
"object" == typeof exports ? 条件3 // commonjs规范
exports.anyizbrecord = e() : 表达式3
t.anyizbrecord = e() 表达式4 // 浏览器全局变量(在window上定义全局变量)
}(window,(function(){})())
通过上面 多条件运算中的含义,我们知道上面代码的执行顺序,得到了最终实现的效果:
根据定义的方法来确定不同的加载规范,这样就可以兼容各种加载规范了。

1264

被折叠的 条评论
为什么被折叠?



