🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[toc] ## 关于arguments - 箭头函数中不支持arguments,但可使用ES6中的`...args`剩余运算符替代(并且`...args`本身就是一个真正的数组无需转换) ``` let fn = (...args)=>eval(arg.join('+')); ``` ## 关于this - 箭头函数自己木有this,用到的this都是它的上级作用域的this,以后实战项目中,并不是要把所有的函数都改为箭头函数,根据自身需要修改即可(例如:我们需要让函数中this是宿主环境中的this,我们才使用箭头函数,或则不涉及this问题,我们想让代码写起来简便一些也可以使用箭头函数) ``` let obj = { name:'obj' ,fn(){ //this->obj setTimeout(()=>{ //this->obj },1000); } }; obj.fn(); ``` ![](https://box.kancloud.cn/9bad2bef447b83a19f551ed3a5e02480_823x385.png) 即使利用`call`,this也是宿主环境中的this(也就是说call等无效) ![](https://box.kancloud.cn/b0e006b8fae0c86fdad3786fa8a82332_853x367.png) ## 关于宿主环境 宿主环境不是执行的环境,而是定义的环境,下面的例子中,fn虽然是在sum中执行的,但是它是在window下定义的,所以它的宿主环境是window ``` let fn=()=>{ console.log(this); } let obj = { name:'obj' ,sum:function(){ //->this.obj fn(); } }; obj.sum(); //window ``` ## 高阶函数 ``` let fn = function(i){ return function(n){ return n+(++i); } } let fn = i=>n=>(n+(++i)); ```