Javascript中的闭包

闭包本质上是函数访问了此函数的父级及父级以上的作用域变量,那么这个函数就是一个闭包。

所以最简单的,下面的代码就是一个闭包

var a = 1;
(function test (){
    alert(a);
})()

上述代码中利用匿名函数使得函数立即执行,函数中调用了函数外的全局变量a,所以是一个闭包。

利用js垃圾回收的特点,使得闭包可以在函数外部访问函数内部的变量。

下面一段代码来自facebook的marketplace创建商品时上传图片生成uoload_id的逻辑

__d(PhotosUploadID, [], (function(a, b, c, d, e, f) {
    var g = 1024;
    function a() {
        return (g++).toString()
    }
    f.getNewID = a
}
), 66);

// some code
// ...

a.uploadID = d(PhotosUp1oadID).getNewID()

上述代码就是一段常见的典型的闭包。使用requirejs定义模块,初始化变量g,从1024开始取值,而后每次调用getNewID都会在g当前值的基础上+1。利用了js闭包中的变量和参数不会被垃圾回收的机制,实现了一个函数计数器。在当前页面每上传一张图片,upload都会+1,而刷新页面后则会重置为1024.

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇