javascript闭包

来源:互联网 发布:java代码自动生成工具 编辑:程序博客网 时间:2024/05/19 21:41

先看下面函数:

<html><head><script src="jquery.js"></script><script>    var scope="gloal scope";    function checkscope(){        var scope="local scope";        function f(){return scope;}        return f();    }    console.log(checkscope());</script></head><body></body></html>
然后看下面函数:

<html><head><script src="jquery.js"></script><script>    var scope="gloal scope";    function checkscope(){        var scope="local scope";        function f(){return scope;}        return f;    }    console.log(checkscope()());</script></head><body></body></html>

两个返回结果都是 local scope

函数中方法的调用:

<html><head><script src="jquery.js"></script><script>    function counter(){        var n=0;        return{            setn:function() {n=9;},            count:function() {return n++;},            reset:function() {n=0;}        }    }    var c=counter(),d=counter();    console.log(c.count());    console.log(c.count());    console.log(c.count());    console.log(d.count());    console.log(d.count());    d.reset()    console.log(d.count());    var e=counter();    e.setn()    console.log(e.count());</script></head><body></body></html>
运行后的结果是:

0 1 2 0 1 0 9 


一个很巧妙的闭包的方法:

<html><head><script src="jquery.js"></script><script>    function addPrivateProperty(o,name,predicate){        var value;        o["get"+name]=function() {return value;}        o["set"+name]=function(v) {            if(predicate && !predicate(v))              throw Error("set"+name+":invalid value"+v);            else              value=v;        }    }    var o={};    addPrivateProperty(o,"Name",function(x) {return typeof x=="string";});    o.setName("Frank");    console.log(o.getName());</script></head><body></body></html>

输出为:

Frank


一个检查函数参数的闭包程序:

<html><head><script src="jquery.js"></script><script>    function check(args){        var actual=args.length;        console.log("the actual is:"+actual);        var expected=args.callee.length;        console.log("the expected is:"+expected);        if(actual!=expected){            throw Error("Expected"+expected+"args;got"+actual);        }    }    function f(x,y,z){        check(arguments);        return x+y+z;    }    console.log(f(1,2,3));    console.log(f(1,2));</script></head><body></body></html>


参考资料:

[javascript权威指南]



原创粉丝点击