• js、匿名函数、闭包、回调函数


    234567891011121314151617181920212223242526272829303132333435

    闭包


    闭包:闭包是指有权访问另一个函数作用域中的变量的函数
    函数嵌套一个函数,并且函数内部的函数可以访问到外部函数的变量,
    注意:变量会驻留在内存中,不会被回收;所以闭包少用


    //一个简单的闭包
    function show(){
    var userName = "胖胖";
    return function(){
    return userName;
    }
    }
    var fin = show();
    alert(fin());


    function show(){ //使用闭包实现累加
    var num = 10;
    return function(){
    num++;
    alert(num);
    }
    }
    var fin = show();
    fin();
    fin();
    fin();

    //打印0 1 2 3
    function show(){
    var arr = [];
    for(var i = 0; i < 4; i++){
    arr[i] = (function(i){
    return i; //i的返回是即时性的,返回i的值
    })(i);
    }
    return arr;
    }
    var arr = show();
    for(var i = 0; i < arr.length; i++){
    alert( arr[i] );
    }


    //闭包中this问题
    var obj = {
    name : "胖胖",
    age : 18,
    sex : "男",
    fin : function(){
    alert(this.name); //这个this指的是obj
    return function(){
    alert(this); //[object Window] 这个this指的就是window
    }
    }
    };
    var show = obj.fin();
    show();


    //块级作用域;任何一对大括号的中的语句集都是一个块,这个块中的定义的变量是不可以见的,或者是不可以访问的
    // javascript中没有块级作用域
    function show(){
    var str = "胖胖";
    }
    alert(str);


    if(true){
    var an = "胖胖";
    }
    alert(an); //这里也能访问 javascript中没有块级作用域


    //可以仿块级作用域
    (function(){
    if(true){
    var an = "胖胖";
    }
    })();
    alert(an);//此时报错 访问不到an


    //私有作用域问题
    var an = "小红"; //A程序员定义的一个an变量;
    var an = "胖胖"; //B程序员定义的一个an变量;
    //变量冲突


    (function(){ //存放A程序员代码
    var an = "小红";
    })();

    (function(){ //存放B程序员代码
    var an = "胖胖";
    })()
    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

    回调函数


    回调函数:就是调用函数的一个方式
    定义:通过函数指针调用函数;


    //first
    function math(num1,num2){
    return minus(num1,num2);
    // return add(num1,num2);
    }
    function add(num1,num2){
    return num1 + num2;
    }
    function minus(num1,num2){
    return num1-num2;
    }
    alert(math(1,2));


    //second
    function math(num1,num2,fin){
    return fin(num1,num2);
    }
    alert( math(1,2,add) );
    alert( math(1,2,minus) );
    function add(num1,num2){
    return num1 + num2;
    }
    function minus(num1,num2){
    return num1-num2;
    }


    //third
    function math(num1,num2,fin){
    return fin(num1,num2);
    }
    math(1,2,function(num1,num2){
    return num1 + num2;
    });
    var num = math(1,2,function(num1,num2){
    return num1 - num2;
    });
    alert(num);


    //the last
    var num = (function(num1,num2,fin){
    return fin(num1,num2);
    })(1,2,function(num1,num2){
    return num1 - num2;
    });
    alert(num);
    ---------------------
    作者:Casablanca_jhBi
    来源:CSDN
    原文:https://blog.csdn.net/weixin_37243717/article/details/78699588?utm_source=copy
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    测试用例
    web 接口测试入门
    Web 安全测试
    Web 测试总结
    linux的基本操作(NFS服务配置)
    linux的基本操作(mysql 的基本操作)
    linux的基本操作(LNMP的基本操作)
    linux的基本操作(LAMP环境搭建)
    linux 的基本操作(linux系统的日常管理)
    Android官方技术文档翻译——ApplicationId 与 PackageName
  • 原文地址:https://www.cnblogs.com/asdyzh/p/9801768.html
Copyright © 2020-2023  润新知