zoukankan      html  css  js  c++  java
  • 递归 闭包

    function factiorial(num) {
            if (num<=1){
                return 1;
            }else{
                return num*arguments.callee(num-1);
            }
        }
        console.log(factiorial(7)); //5040

    使用arguments.callee指向正在执行的函数的指针。

    function createFunction() {
            var res =new Array();
            for(var i=0;i<10;i++){
                res[i] = function () {
                    return i;
                }(i);
            }
            return res;
        }
        console.log(createFunction());

    虽然知道要执行for循环里面的function,但是闭包还是了解不透彻

    var name = "window";
        var Obj = {
            name:"Obj",
            getName:function () {
                console.log(this.name);
            }
        }
        Obj.getName(); //Obj

    这里没有使用闭包

    var name = "window";
        var Obj = {
            name:"Obj",
            getName:function () {
                return function () {
                    return console.log(this.name);
                }
            }
        }
        Obj.getName()(); //window

    这里使用了闭包,然后因为函数在被调用时,会产生两个变量,arguments和this。内部函数在搜索这两个变量的时候会搜索到其活动对象为止,而不会访问外部函数的变量。所以返回的是window

    var name = "window";
        var Obj = {
            name:"Obj",
            getName:function () {
                var _this =this
                return function () {
                    return console.log(_this.name);
                }
            }
        }
        Obj.getName()(); //Obj

    把外部函数的this保存在一个闭包能访问到的变量里,就可以让闭包访问这个对象。

  • 相关阅读:
    URL参数加密专用
    错误
    js学习类
    .net第一个服务器控件
    javascript中的call()和apply()方法 原创实例
    FIS使用技巧
    自定义参数表单URL参数处理
    避免编写解决"不存在"问题的代码
    从 1.1.0 升级到 1.2.0 的注意事项
    jquery常用插件,应用解析
  • 原文地址:https://www.cnblogs.com/vivenZ/p/6435702.html
Copyright © 2011-2022 走看看