发表于: 2017-07-26 22:58:51

1 822


今天完成的事情:和后端沟通,调试接口、准备小课堂

明天计划的事情:准备小课堂,调试接口

遇到的问题:

一、

后端接口还是没写好,数据结构和数据格式都还是存在问题,一个能正常用的接口都没有,只能照着把字段和url写好。

延期风险很大。


收获:

小课堂学习了自执行函数,讲的不错,整理了一下:


自执行函数:有两种理解,一种是立即执行函数,另一种是递归函数。一般情况下理解为立即执行函数

立即执行函数:

一般用于隔离变量作用域,防止变量全局污染。

推荐的写法:

(function(a){

/*****/

 return a;  

})(123);


 或者:

(function(a){

/*****/

  return a;

}(1234));


也能这么写,在前面加运算符!、+、-等等:

!function(a){

/*****/

  return a;  //返回值是false

}(12345);

但是这样写会对函数的返回值进行运算操作,可能会引起不必要的麻烦,所以不推荐


递归:


定义一个递归函数,实现阶乘

function factorial(n){

        if(n<=1){

            return 1;

        }else{

            return n*factorial(n-1);

        }

};

直接像这样调用时没问题的: factorial(5);


但是如果这样写时就会有问题:

var f=factorial;

       factorial=null;

       alert(f(3));


factorial指向空,但是调用f时还是会使用factorial,所以会报错


解决办法:

1.利用arguments.callee,不好用

function factorial(n){

if(n<=1){

return 1;

}else{

return n*arguments.callee(n-1);

}

}


2.定义递归时用命名函数:

var factorial = (function f(n) {

    if (n <= 1) {

        return 1;

    } else {

        return n * f(n - 1);

    }

});

//这时候就不会出现上面存在的问题了

var anotherF = factorial;

factorial = null;

alert(anotherF(2));





返回列表 返回列表
评论

    分享到