1、关于登录后第一次调用接口token为undefined的情况
在我们利用axios.create
const getInstance = () => {
return axios.create({
headers: {
Authorization: `Bearer ${storage.get("token")}`,
Server: `${Date.parse(new Date().toString())}`, //添加时间戳
},
baseURL: API_BASE_URL,
timeout: 60000,
});
};
//定义常量defhttp并赋值,抛出,此时无论调用几次defhttp,方法都只会执行一次,因为defhttp现在是个常量,而页面上常量只执行一次
export const defhttp =getInstance();
//箭头函数指向getInstance(),相当于定义了一个匿名函数,匿名函数的地址指向defhttp
//不用let定义的原因,是因为let也是块级作用域,只能在当前页面使用
export const defhttp =()=>getInstance()
//表面理解为
function defhttp(){
getInstance()
return getInstance
//写成匿名函数后,调用时使用defhttp()
}
2、带名,匿名,箭头函数区别
带名函数是指函数显示地给出了一个名字的函数,function abs(x){}。
匿名函数是指函数只带有function这个关键字,而没有像abs这种函数名称的函数,如function(){}。
箭头函数表面上相当于匿名函数,并且简化了函数定义。使用方法大多与匿名函数相同——可以当做变量的值、当做参数值、可以自调用,
- 带名和匿名函数的区别
== 补充函数地址==:一般理解是函数名即为函数地址,也是函数的入口地址,
区别:匿名函数需要将地址赋值给另一个变量或常量let a,然后再用a来调用函数;而带名函数因为显示地给出了函数名称,所以可以直接用这个函数名称调用。
带名函数返回值是函数体内的返回值,如abs(x)函数的返回值是number变量。函数调用时,直接abs(6)调用。
function abs(x){
if(x>=0){
return x;
}else{
return -x;
}
}
而匿名函数,如下所示,函数未显示地给出一个函数名称,但是此处的abs被赋值为这个匿名函数的地址,所以使用时可以直接用abs(-3),诸如此类的调用。
let abs=function(x){
if(x>=0){
return x;
}else{
return -x;
}
}
- 箭头函数
箭头函数有两种格式,一种是只包含一个表达式,连{ … }和return都省略掉了。
//只有一个return时可以省略return
x => x * x
上面的箭头函数相当于一个匿名函数
function (x) {
return x * x;
}
当箭头函数包含多条语句,这时候就不能省略{ … }和return:
(x,y) => {
if (x > 0) {
return x + y;
}
else {
return -x + y;
}
}
- 箭头函数和匿名函数的不同
箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。
- const和return
const :常量的值不能通过重新赋值来改变,并且不能重新声明,块级作用域不能提升变量
return的作用:给函数一个返回值;写在return右边的代码 + 即让函数执行完毕后由有个结果
//*不写ruturn 函数的返回值就是undefined
//*写了ruturn 没写返回内容返回值还是undefined
//*如果写了return 后面有东西,那么写什么,该函数的返回值就是什么;
//*如果写了return 但是后面没有东西,那么该函数的返回值是undefined
//*多个ruturn 只执行第一层的 后面代码不会执行
下面是本文借鉴的文章地址,
本文的参照链接地址