1.回调函数
function add(num1,num2,callback){
var sum=num1+num2
if(typeof callback==='function'){
callback(sum)
}
}
add(1,2,function(sum){
console.log(sum)
})
2.自定义的js,如bind`
let foo={name:'wh', age:25}
function getName(){
console.log(this.name)
}
function getAge(){
console.log(this.age)
}
Function.prototype.myBind=function(obj){
let _self=this
return function(){
return _self.call(obj)
}
}
let getFooName=getAge.myBind(foo)
getFooName()
3.利用闭包判断数据类型
// type = ['Undefined', 'Null', 'Boolean', 'Number', 'String', 'Function', 'Array', 'Object']
function isType(type){
return function(target){
return `[object ${type}]` === Object.prototype.toString.call(target)
}
}
const isArray=isType('Object')
console.log(isArray([1,2,3]))
console.log(isArray({}))
console.log(isArray('dk'))
4.封装私有变量和函数
function buildPerson(name){
var age=1;
return{
getName:()=>{
return name
},
getAge: ()=>{
return age
},
setAge:(newAge)=>{
age=newAge
}
}
}
var person=buildPerson('js')
console.log(person.getName())
console.log(person.getAge())
person.setAge(16)
console.log(person.getAge())
5.数组的求和
function sum(arr){
return arr.reduce((x,y)=>{
return x+y
})
}
console.log(sum([1,2,3,4]))
6.数组的延迟求和
function lazySum(arr){
var sum=function(){
arr.reduce((x,y)=>{
return x+y
})
}
return sum
}
var sums=lazySum([1,2,3,4,5])
console.log(sums) // 返回函数
7. 迭代器
var arr=['aa', 'bb', 'cc']
function diedai(arr){
var i=0;
return function(){
return arr[i++] || '数组已经遍历完'
}
}
var next=diedai(arr);
console.log(next())
console.log(next())
console.log(next())
console.log(next())
console.log(next())
8、缓存
这一部分还不是很懂
var fn=(function(){
var cache={}
var calc=function(arr){
var sum=0;
for(var i=0; i<arr.length; i++){
sum+=arr[i]
}
}
return function(){
var args = Array.prototype.slice.call(arguments,0)
var key=args.join(',')
var result, tSum=cache[key]
if(tSum){
console.log('从缓存中取', cache)
result=tSum
}else{
result=cache[key]=calc(args)
console.log("存入缓存", cache)
}
return result
}
})()
fn(1,2,3,4,5)
fn(1,2,3,4,5)
fn(1,2,3,4,5,6)
fn(1,2,3,4,5,8)
fn(1,2,3,4,5,6)