javascript闭包

一句话:有权访问另一个函数作用域内变量的函数都是闭包。

           有权访问另一个函数作用域内变量的函数都是闭包。

           有权访问另一个函数作用域内变量的函数都是闭包。

说三遍的都是真理!

不多说看代码:

function a() {
    var b = 0;

    function c() {
        alert(b++);
    }

    return c;
}
var d = a();
d();//b=0;
d();//b=1;

  

如上是一层嵌套,下面是两层:
function a() {
    var b = 0;

    function c() {
        function f() {
            alert(b++);
        }

        return f;
    }

    return c;
}
var d = a();
d();
d();

  

浏览器并没有弹窗而是打印出了
function f() {
     alert(b);
}

 

而把 b(); 改成 b()();  则可以正常反应。

* ()是指执行函数的意思。

 

//2016/8/11更新

 

 
function makeSizer(size) {
  return function() {
    document.body.style.fontSize = size + 'px';
  };
}

var size12 = makeSizer(12);
var size14 = makeSizer(14);
var size16 = makeSizer(16);

document.getElementById('size-12').onclick = size12;
document.getElementById('size-14').onclick = size14;
document.getElementById('size-16').onclick = size16;
<a href="#" id="size-12">12</a>
<a href="#" id="size-14">14</a>
<a href="#" id="size-16">16</a>

 

 

 结果很显然无论怎么点击都是16px的字体,因为size在makeSize中是一个单独的变量,他只会有一个值,而在makeSize的return中加入变量才是正确的

posted @ 2016-05-13 18:07  be_a_better_me  阅读(161)  评论(0)    收藏  举报