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