函数写法的进化
模块化封装进程
原始写法-->对象写法-->立即执行函数写法-->放大模式--> 宽放大模式
原始写法
function funA(){
}
function funB(){
}
对象写法
var funA = {
msg:'这是信息',
showA:function(){
console.log('白色的啊')
}
}
var funB = {
num:996,
showA:function(){
console.log('真开心')
}
}
console.log(funA.msg)
console.log(funB.num)
funA.showA()
funB.showA()
立即执行函数
全局变量污染,组件是私有化的
不方便进行扩展
var funA = (function(){
var num = 007;
function showA(){
console.log('凌凌漆才是王者')
}
function showB(){
console.log(num+996)
}
return {
showA:showA,
showB:showB
}
})()
funA.showA()
console.log(funA.num) // 无法输出,因为num是私有变量
放大模式
缺点,由于模块是异步加载,而文件之间有依赖
放大模式第一次暴露的是私有属性和方法,第二次接受的是属性和方法
var funA = (function () {
var num = 250
function takeA() {
console.log('你以为你是谁啊')
}
return {
takeA: takeA,
}
})()
// 向A内添加元素
funA = (function (fun) {
var name = '不理求留底不抵多'
function chaos() {
console.log('混乱才是永恒')
}
fun.name = name
fun.chaos = chaos
return fun
})(funA)
funA.chaos()
funA.takeA()
console.log(funA.name)
宽放大模式
不用担心方法的顺序
var funA = (function (fun) {
var num = 250
function takeA() {
console.log('你以为你是谁啊')
}
fun.takeA = takeA
return fun
})(funA || {})
// 向A内添加元素
funA = (function (fun) {
var name = '不理求留底不抵多'
console.log(num)
function chaos() {
console.log('混乱才是永恒')
}
fun.name = name
fun.chaos = chaos
return fun
})(funA || {})
funA.chaos()
funA.takeA()
console.log(funA.name)