发表于: 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));
评论