foo2()는 화살표 기능을 사용합니다. call의 이해에 따르면 foo.call({id:23})은 0이 아닌 23을 출력해야 합니다. 그럼 누구든지 이것을 설명할 수 있나요? 코드는 다음과 같습니다: <script type="text/javascript">
</script>
실행 결과: 02
foo 函数里面的 this 还是 {id:23} 但是到了 setTimeout 接受的回掉里面, this 就变为了 window 所以就输出了全局的 0,第二个因为箭头函数,this 与 foo2 的 this 바인딩이므로 2
foo
this
{id:23}
setTimeout
window
foo2
foo2의 setTimeout 매개변수는 화살표 함수이며, 그 안의 this는 런타임이 실행되는 범위를 가리키는 것이 아니라 바인딩이 정의된 범위(foo2가 실행될 때 호출의 객체임)입니다. . 일반적인 setTimeout의 함수는 런타임 범위(창)에 바인딩됩니다.
1. foo 함수의 this는 window이고, foo2 함수의 this는 {id: 2} 객체입니다.
분명히 첫 번째 this는 창을 가리키고 두 번째 화살표 함수는 현재 개체를 가리킵니다. 즉, 호출하는 사람이 호출하는 사람을 가리킵니다. 첫 번째 함수는 문제를 해결하기 위해 변경될 수 있습니다. 으아악
1. setTimeout의 콜백 함수는 foo가 실행된 후 100ms 후에 실행되며 런타임 범위는 window입니다. 2. 화살표 함수를 사용하면 setTimeout에서 이것이 실행되는 범위를 가리키는 대신 정의된 범위에 바인딩될 수 있습니다.
화살표 함수 범위의 문제
foo
函数里面的this
还是{id:23}
但是到了setTimeout
接受的回掉里面,this
就变为了window
所以就输出了全局的 0,第二个因为箭头函数,this
与foo2
的this
바인딩이므로 2foo2의 setTimeout 매개변수는 화살표 함수이며, 그 안의 this는 런타임이 실행되는 범위를 가리키는 것이 아니라 바인딩이 정의된 범위(foo2가 실행될 때 호출의 객체임)입니다. . 일반적인 setTimeout의 함수는 런타임 범위(창)에 바인딩됩니다.
1. foo 함수의 this는 window이고, foo2 함수의 this는 {id: 2} 객체입니다.
분명히 첫 번째 this는 창을 가리키고 두 번째 화살표 함수는 현재 개체를 가리킵니다. 즉, 호출하는 사람이 호출하는 사람을 가리킵니다.
첫 번째 함수는 문제를 해결하기 위해 변경될 수 있습니다. 으아악
1. setTimeout의 콜백 함수는 foo가 실행된 후 100ms 후에 실행되며 런타임 범위는 window입니다.
2. 화살표 함수를 사용하면 setTimeout에서 이것이 실행되는 범위를 가리키는 대신 정의된 범위에 바인딩될 수 있습니다.
화살표 함수 범위의 문제