堕性函数
单例设计模式
let untils = (function(){
let plana = function (){
// doing...
}
let planb = function (){
//todo...
}
return {
plana,
planb
}
})()
// 利用闭包的保护机制防止变量名冲突
let persons = (function(){
let plana = function(){
untils.plana()
}
return {}
})()
DOM2事件绑定方式
元素.addEventListener
元素.attachEvent
function emit (element,type,func) {
if(element.addEventListener) {
element.addEventListener(type,func,false)
} else if (element.attachEvent) {
element.attachEvent('on'+type,func)
} else {
element['on'+type] = func
}
}
// 这样浏览器每次就需要做兼容判断,但是我第一次判断之后就已经知道是否兼容去执行某个函数
function emit(element,type,func) {
if(element.addEventListener) {
emit = function(element,type,func) {
element.addEventListener(type,func,false)
}
} else if (element.attachEvent) {
emit = function(element,type,func) {
element.attachEvent('on'+type,func)
}
} else {
emit = function(element,type,func) {
element['on'+type] = func
}
}
emit(element,type,func)
}
//这样就只需要判断一次就可以了、
柯理化函数的思想
利用闭包的机制拔一下内容先存储和处理了,等到后期需要的时候拿来即用既可
function bind (func,context,...args) {
return function (ev) {
func.call(context,...args)
}
}
(function bind(proto){
function bind (context = window, ...outArgs) {
let _this = this
return function proxy(...ev){
let args = outArgs.concat(ev)
_this.call(context, ...args)
}
}
proto.bind = bind
})(Function.prototype)