84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
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에서 이것이 실행되는 범위를 가리키는 대신 정의된 범위에 바인딩될 수 있습니다.
화살표 함수 범위의 문제