您的位置:首页 > 其它

关于箭头函数的理解摘记

2017-08-14 12:50 232 查看
参考:https://github.com/ruanyf/es6tutorial/issues/150
1.“箭头函数”(arrow function)是规格里面的用语。事实上,整个规格里面一次也没有提到
lambda

2.“箭头函数”的this,总是指向定义时所在的对象,而不是运行时所在的对象。这句话是对的,并没有写错

3.
function foo(){ 
setTimeout(() => { 
console.log("id:", this.id) 

}, 100); 


  foo.call({id:42});
请问,上面代码的
{id: 42}
,到底是箭头函数定义时所在的对象,还是运行时所在的对象?
你认为,答案是后者。这是不对的。
因为,这个例子中,箭头函数位于
foo
函数内部。只有
foo
函数运行后,它才会按照定义生成,所以
foo

行时所在的对象,恰好是箭头函数定义时所在的对象。

4. 我对上面这个例子,做了一下修改。
function foo()

setTimeout(
() => {

       console.log(this);

       console.log("id:", this.id); 

   },100); 

     } 
          var id = 21; // 加入这行 
    foo.call(
{ id: 42 }
);
请问,上面两个
id
,哪个是箭头函数定义时所在的对象,哪个是箭头函数运行时所在的对象?

5.你把箭头函数所在的函数与箭头函数本身混淆了。

6.最后,我再举一个例子。

请问,下面的代码运行结果是什么?

function foo() {
     return () => {
       return () => {
         return () => {

           console.log("id:", this.id);        
 };
      };
 
   };
} var f = foo.call({id: 1}); var t1 = f.call({id: 2})()(); var t2 = f().call({id: 3})(); var t3 = f()().call({id: 4});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: