zoukankan      html  css  js  c++  java
  • 如何去理解return?

    作为新人,那就要必须去不断的学习,这样才能挖掘到更多的代码保障,之前有学习闭包的,但是还不怎么理解,大早上琢磨,有了一点点个人想法。

    想要学习闭包或者懂得闭包,那就得先学会:

     return

    return 翻译为返回的意思,在函数执行中,如果直接return 意思为终止函数往下执行。

     return 返回值 return false return true return 的区别?

    return后面可以接收值,可接收函数,布尔值,对象等等等等。

    (曾经还傻不拉几去百度 return true  return false  return 的区别)不就是return 终止函数吗? return false 与true 不就是返回的是布尔值吗? 不就是通过返回的布尔值在外面接收然后判断需要执行的语句?网上的废话连篇。

            function fn1(){
                console.log(1);
                return;
                console.log(2)//没被执行
            }
            
            function fn2(){
                console.log(1);
                return false;
                console.log(2)//没被执行
            }
            
            function fn3(){
                console.log(1);
                return true;
                console.log(2)//没被执行
            }
            
            if (fn2()==false) {
                alert('其实就是接收布尔值判断而已啊');
            }

    联想到一个问题,你见到的返回值是不是都是放到函数(function)里面?注:在这里你得想到return的目的到底是什么(非常重要的理解)?

    1.把函数和return 分开理解,return只是挂在了函数上面

    function fn(){
        return 3;
    }
    fn();// fn()这个不仅仅是一个函数表达式,而且已经有返回值了 通过console.log(fn()) 得到的是3,可以联想到fn()==3;

    再来看下面这个案例:

    function fn1(){
             return 3;
          }
    console.log(fn1()+3); //输出的是6 cc()相当于已经被return赋值了。
    function fn2(){
                var a=1;
                console.log(a);
                return 3;
            }
            fn2();//1  fn2()这个不仅仅是一个函数表达式能输出a 变量,而且已经有返回值了 通过console.log(fn2()) 得到的是3,可以联想到fn2()==3;
            console.log(fn2()+3)//6

    相信看到上面这两个案例你已经和我一样差不多知道return 的意思了,在函数里面(个人理解)凡是有返回值了,那么这个函数就只会围绕这个返回值去做功能。不管你是判断再返回,都围绕返回值来进行开发,一个函数只有一个返回值,即使判断语句也是返回其中一条。

    初步理解闭包。

    闭包是为了什么?答:为了避免变量污染(来自超级大叔的好心回答)
    返回值是为了什么?答:鬼知道你想拿来干什么 

    先看看菜鸟教程大佬们的分析:

    function outerFunction() {
        var counter = 0;
        function innerFunction(){
            return counter += 1;
        }
        return innerFunction;
        /*
         注意 typeof innerFunction 是:function;而typeof innerFunction()是number;
        */
    }
    var add = outerFunction();
    
    /* 
    调用 outerFunction()返回的是内部函数innerFucntion,那么调用几次add()将调用几次
    内部函数inner Function,内部函数公用了counter,所以能够计数,所以说闭包就是将内部嵌套函数变成外部可调用的。
    */
    
    add();
    add();
    add();

    看了我的return方法之后是不是觉得很好懂这句代码?函数嵌套,innerFunction()= return counter += 1;不就是innerFunction()返回的值是 counter+=1吗?这不就是一个计算的函数表达式计算方法?记住了这个方法。

    然后再return innerFunction;  不就是把里面的那个功能的计算方法再返回赋值给outerFunction();现在外面这个函数都已经有了里面的函数的方法,说白了一个挂着一个。这就是闭包,就是不管outerFunction()外面怎么变,但是我这个函数始终记住这个计算方法功能与下面一样的道理。

           function outerFunction() {
                function innerFunction(){
                    return 1;
                }
                return innerFunction;
            }
            var add = outerFunction();
            add();

     闭包案例延伸:

    function outer(x){
            function inner(y){
                alert(y);
                console.log(x+y);
            }
            return inner;
        }
        var i=outer(3);
        i(5);//8

     return inner ;相当返回inner(y)函数赋值(挂上)给了outer(x)这个函数,outer(x)=inner(y)。

    通过var i=outer(x)这个变量接收值,但其实值是inner(y)这个函数,所以自然而然的i =inner(y),所以x+y=8;

        function fun1(m,n){
            function fun2(m){
                alert(m+n);
            }
            return fun2;
        }
        var f=fun1(3,4);
        f(6);//10

     闭包案例延伸2

    function c(){
        return b;
        alert(typeof b);
        function b(){
            console.log('b');
        }
    }
    console.log(c());
    var _a=c();
    _a();
    //等价于下面这个
    function c(){ function b(){ console.log('b'); } return b; } var _a=c(); _a();
     解析过程会优先定义变量和执行函数表达式. 
     
  • 相关阅读:
    jenkins结合cygwin软件实现从centos发布代码rsync到windows server2019的过程
    ansible的playbook创建nginx站点配置示例
    windows环境下搭建redis/php7.2/nginx1.18环境
    aws亚马逊购买负载均衡alb和ec2服务器备注
    Window server 2019安装.net3.5并通过jenkins发布c#代码
    windows server2019环境下安装openssh进行jenkins代码golang发布
    进程管理脚本包括start/stop/restart/status
    通过dockerfile制作基于centos8系统的nginx镜像
    创建基于harbor的docker仓库
    jenkins配置添加windows节点做ui自动化测试
  • 原文地址:https://www.cnblogs.com/xiaobaicai123/p/10593332.html
Copyright © 2011-2022 走看看