关于箭头函数的理解摘记
2017-08-14 12:50
232 查看
参考:https://github.com/ruanyf/es6tutorial/issues/150
1.“箭头函数”(arrow function)是规格里面的用语。事实上,整个规格里面一次也没有提到
2.“箭头函数”的this,总是指向定义时所在的对象,而不是运行时所在的对象。这句话是对的,并没有写错
3.
function foo(){
setTimeout(() => {
console.log("id:", this.id)
}, 100);
}
foo.call({id:42});
请问,上面代码的
你认为,答案是后者。这是不对的。
因为,这个例子中,箭头函数位于
行时所在的对象,恰好是箭头函数定义时所在的对象。
4. 我对上面这个例子,做了一下修改。
function foo()
{
setTimeout(
() => {
console.log(this);
console.log("id:", this.id);
},100);
}
var id = 21; // 加入这行
foo.call(
{ id: 42 }
);
请问,上面两个
5.你把箭头函数所在的函数与箭头函数本身混淆了。
6.最后,我再举一个例子。
请问,下面的代码运行结果是什么?
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});
相关文章推荐
- 关于es2015箭头函数的大括号代码块部分的一点理解
- 关于函数指针的理解(指向的函数返回值又是另外一个函数指针)
- 关于OGL旋转函数glRotate参数的理解
- 关于call(),apply(),bind()函数的理解
- 关于DC和SelectObject()函数的理解
- 关于nodejs中的回调函数理解
- 关于递归调用,函数指针,数组,字符串的一些理解
- TensorFlow中关于pad函数的详细理解
- 关于getch()函数的理解
- 20170907_关于 fork函数和父子进程的理解
- 关于strtok()函数的小小的理解
- 关于网络编程中一些常用函数的理解
- 关于send()函数及EAGIN错误的理解
- 【Linux】关于理解fork()函数的简单例子
- 关于箭头函数的 this 绑定
- 个人理解:关于指针数组、数组指针、函数指针、函数指针数组、函数指针数组指针
- Vc中关于DC(设备环境函数(Device Context))的理解
- 绑定函数【OpenGL】关于OpenGL中Bind函数的理解
- 关于copyto函数的理解
- 《深入理解计算机系统》第八章 (一)关于子进程创建函数fork的理解