一、今天完成的事情:
1.测试了后端给出的职位列表接口,现在只通过了获取职位列表接口,还有新增、编辑没有通过;
2.修改了职位新增、编辑代码,删除了三期中不需要的代码。
3.将脑图和chartjs搬到了后台,创建了预览页面;
4.了解了h5的新接口;
5.看了一下fis3,看不懂,放弃了,还是多看看基础吧,这个。。真的是看不懂,可能是还没有碰到类似的问题吧;
二、明天要做的事情:
1.明天UI图能出来了,完成前台的样式;
2.继续测试接口
三、遇到的问题:
关于IIFE、闭包、模块化
1.什么是函数声明、什么是函数表达式:
函数声明:
function sum(num1,num2) {
return num1+num2
}
这个就是函数声明了,在使用函数声明的时候需要注意到此时会有变量提升,function的提升比var提升更厉害,会在var之前就被声明,并且在实际运行中不会被后面的var覆盖;
函数表达式:
var sum = function (num1,num2) {
return num1+num2
}
函数表达式就是在前面先声明变量,注意这个变量的提升并没有函数声明厉害,所以在此之前consol.log(sum)会报错
接下来我们说说函数立即执行的问题,一般来说,我们在函数后面写上一个()这个函数就会被执行,但是如果我们这样写的话会被报错。
function () {
}()
这是为什么呢?因为编译器在碰到function关键字的时候,必须要它后面跟一个名字,我们这里并没有跟名字,所以会报错。那如果我们加上名字呢,像这样:
function sum() {
}()
这里也会报错,这是为什么呢?因为这里后面的()相当于分组操作符,代表后面的先运算,然后再执行前面的,但是我们的分组操作符里面并没有任何东西,所以就会报错咯。
所以我们究竟应该如何做呢?很简单,我们只需要将前面的function前后两个都用括号括起来:
(function() {
}())
为什么像这样做就不会报错了呢?因为编译器在碰到()之后再看到function,就会把括号内的东西识别为函数表达式而不是函数声明,所以聪明的你是不是想到了立即执行肯定会有很多种写法呢?答案是肯定的!比如这样
(function() {
})()
而且js中的一些操作符,如 = && ||都可以消除歧义,让编译器知道,我们这个是一个函数表达式,不是一个函数声明,并且一元操作符也可以消除这种歧义,如果你不怕代码晦涩难懂的话!(一元操作符:!+ - ~),当然不管什么时候,给立即执行函数加上()都是一个好习惯,有些时候我们并不需要在外面加括号就能够立即执行,但是我们还是推荐加上,为什么?因为我们无法确定它到底是一个function,还是function内部返回的值,如果不写的话,我们还需要拖动到最后面去查看,这样就很麻烦!
//这样是可行的
var i = function () {
}();
//推荐
var i =(function () {
}())
当然这里我们也可以咬文嚼字一下,自执行函数和立即执行函数,它们有啥区别,我的理解是自执行函数是执行它本身(相当于递归调用),立即执行函数,就是我们上面说到的IIFE,它就是立即执行,我们的IIFE也可以立即执行调用本身,完成递归,只是不太常用。自执行函数,最大的作用是完成我们代码中的模块化,让我们每个模块拥有更多的私有变量,
它和构造函数的区别是,构造函数如果里面的数据是你需要更改和用到的,那么就用构造函数,如果不是,只是要利用它的方法,那么就用iife
评论