如何去理解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();
 解析过程会优先定义变量和执行函数表达式. 
 
原文地址:https://www.cnblogs.com/xiaobaicai123/p/10593332.html