赞
踩
什么是匿名函数:定义函数时 不指定函数名的函数。
优势:节约内存 ,避免产生全局变量,造成全局污染;
使用情景:
什么是回调函数?
自己定义了函数 ,但是不由自己调用,而是交给另一个函数,由另一个函数按需自动调用。
优点:节约内存
例如: 想将一个数字内容的数组升序排列
当执行到arr.sort( )的时候 会先执行( )里边的操作 也就是 function(a,b){xxx} ,因为function(a,b)没有变量名所以并没有存在变量里边 那么在arr.sort( )执行完之后 会释放function(a,b)占用的内存 ,会进行垃圾回收
arr.sort(function(a,b){return a-b})
下边的方式 较上边就浪费了内存
var fn 相当于定义了一个变量
function( )相当于new Function( ) 在内存里开辟了一块内存空间 有唯一的地址
因为有变量名 所以这块地址存在了变量里边保存
那么当arr.sort( fn )调用的时候 就会先找到 fn变量 再找到定义的函数执行
当执行完毕之后 arr.sort( )结束 但是 fn在内存空间中引用的地址会一直保存 不被释放,就造成了占用多于内存
- var fn = function (a,b) {return a-b};
- arr.sort(fn)
什么是匿名函数自调?
定义一个匿名函数后,立刻调用该函数执行,调用后立刻释放
优点:避免产生全局变量,造成全局污染
使用:
标准写法:
- (function (){...})()
- //创建新函数 立刻调用执行
- //因为函数没有名字 所以调用后立刻释放
其他写法:
- +function(){...}()
- !function(){...}()
例:以下情况 就会造成 全局变量污染
- //全局变量 记录程序执行的总时间
- var t = 0;
- //第一段程序执行0.3s
- t+=0.3
- //第二段程序执行0.8s
- t+=0.8
- //.....
- var t = new Date()
- console.log(t)
用匿名函数自调的方式解决:
建议每段函数都要用匿名函数自调的方式 减少变量污染
- //全局变量 记录程序执行的总时间
- var t = 0;
- //第一段程序执行0.3s
- t+=0.3
- //第二段程序执行0.8s
- t+=0.8
- //.....
- (function (){
- //这里的 t 就是局部变量了
- var t = new Date();
- consloe.log(t,匿名函数自调)
- })()
-
- console.log(t)
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。