自从了解 js 通过 canvas 压缩图片上传功能以后, 小白对 javascript 的敬畏之心又提升了一大截, 这两天在练习的时候发现自己平时熟悉的代码变得陌生起来, 比如为什么定义函数时这两个方式都可以用
带着这个疑问, 小白找到了老朱朱哥, 为啥在 js 里面要用两种定义函数的方式呢?
老朱: 严格意义上来说上面那个不是定义一个函数, 而是将一个变量指向了一个匿名函数, 这里是引用的关系你可以控制台输出一下两个函数名看看
小白执行了一下输出以后惊讶的说道: 果然不一样啊, 一个有函数名, 一个没有函数名
老朱: 在 js 中匿名函数用处非常大, 这几天我们写的代码里面有很多的匿名函数, 你可以找找
小白: 哇, 随便翻了一下昨天的代码里面就有匿名函数啊这段点击按钮上传图片的代码中就有两个
老朱: 匿名函数非常有个特点, 匿名函数如果没有被引用, 用完后会被销毁, 也就是垃圾回收释放内存如果被引用, 而引用它的那个变量一直在内存中, 它指向的匿名函数就会一直存在, 不会被销毁比如上面的代码中 click 里面的匿名函数没有被引用, 用完后会被销毁, 匿名函数中的 success 指向的匿名函数被引用, 只有 success 被销毁时, 这个匿名函数才会被回收垃圾回收这块说起来会比较复杂, 我们有时间详细聊聊
老朱顿了一下接着说道: 之前我们用到的匿名函数基本都用在了参数传递和引用上, 在 js 中匿名函数还有一个非常重要的用法就是在页面加载以后执行一个匿名函数
这个函数在页面加载后会立即执行, 如果函数有参数, 可以通过最后面的小括号进行传参如果这个页面被其他页面加载调用, 这里的匿名函数被加载以后就会立即执行, 由于匿名函数中我们使用了 var 进行变量定义, 因此匿名函数中的变量不会与主页面中的变量冲突, 匿名函数执行结束以后内部的变量也会被销毁, 不会占用内存
另外如果你的页面中引入很多其他 js 文件, 为了避免变量冲突, 也需要在页面中使用上面的匿名函数来规避风险
想学 H5 的朋友可以关注老炉, 您的关注是我持续更新小白 html5 成长之路的动力!
来源: http://www.jianshu.com/p/c908973bb3f0