Javascript之闭包

来源:互联网 发布:mp4视频字幕合并 mac 编辑:程序博客网 时间:2024/05/18 03:05
**闭包**<script type="text/javascript">    /* 闭包:         1.函数里面的函数         2.在外函数内部能调用外函数局部变量的函数       作用域:         全局作用域:页面         局部作用域:方法中        全局变量:1.在函数外部定义    2.不用var修饰的变量        局部变量    */    var a = 20;//全局变量    function fun(){        var c = 100;//局部变量        b = 30;//全局变量        b++;        alert(a++);    }    fun();//  alert(a);//  alert(b);//  alert(c);//弹不出来,undefined,被销毁了    //闭包    var num = 100;     function func(){         var num2 = 100;         //对外提供的公共方法(setter方法)         method = function(){             num+=1;         }         //闭包:确保局部变量在函数执行完毕还存在于内存中    //public方法        var method2 = function(){//闭包            // alert(num2);            alert("hello");         }         return method2;     }//   func()();//调用内部函数    var result = func();    method();    result();</script>**递归**<script type="text/javascript">    //递归:函数自身调用自身   入口  出口    //累加    function fun(n){        if(n==0){            return 0;        }        return n+fun(n-1);    }    alert("所求之和为:"+fun(100));    //斐波数列    function func(n){        if(n==1|n==2){            return 1;        }else{            return func(n-2)+func(n-1);        }    }    alert("所求之数为:"+func(6));</script>**修改指针指向**<script type="text/javascript">/* 指针:函数调用者对象*/    function fun(){        alert(this);    }    fun();//this代表调用该函数的对象---window    //修改指针:改变调用函数对象    //需求:将fun1的调用指针改变为fun2    function fun1(){        alert(a+b);        alert(this);    }    function fun2(){        alert(a+b);    }    fun1.call(fun2,20,30);//输出来是fun2的对象==说明指针指向fun2    fun1.apply(fun2,[20,30]);    //简单模拟继承    function Person(name,sex){        this.name = name;        this.sex = sex;        this.speak = function(){            alert(this.name);        }    }    function Chinese(name,sex,age){        this.name = name;        this.sex = sex;                                                                           this.age = age;    }    var person = new Person("张三","男");    var ch = new Chinese("李四","女  ");    person.speak.call(ch,"张三","男");    ch.speak;</script>**arguments**<script type="text/javascript">    function fun(a,b,c){        for(var i = 0;i<arguments.length;i++){            alert(arguments[i]);        }        alert(arguments.callee);//返回当前执行的函数对象        func();    }    fun(1,2,3);    function func(){        alert(func.caller);//返回调用函数的函数对象    }//  func();</script>**prototype**<script type="text/javascript">    function Animal(name,age){        this.name = name;        this.age = age;        this.eat = function(){            alert(this.name + "is eatting...");        }        this.bite = function(){            alert(this.name+"---"+this.age);        }    /* 1.可以给函数添加额外的方法或属性       2.可以类似于重写函数的方法     */    //在函数内定义方法时有重名的,使用原型定义时,仍然以非原型为主        Animal.prototype.bite = function(){            alert(this.name+"can bite...");        }    }    //在函数外添加方法    Animal.prototype.out = function(){        alert(this.name+"---is gettng out");    }    Animal.prototype.sex = "雄性";    var animal = new Animal("阿黄",20);    animal.eat();    animal.bite();    animal.out();    alert(animal.sex);</script>
0 0
原创粉丝点击