javascript - js 호출 문제, 매우 간단한 코드, 출력 결과를 해석하는 방법은 무엇입니까?
phpcn_u1582
phpcn_u1582 2017-06-26 10:50:10
0
6
733

foo2()는 화살표 기능을 사용합니다.
call의 이해에 따르면 foo.call({id:23})은 0이 아닌 23을 출력해야 합니다. 그럼 누구든지 이것을 설명할 수 있나요?
코드는 다음과 같습니다:
<script type="text/javascript">

으아악

</script>

실행 결과:
0
2

phpcn_u1582
phpcn_u1582

모든 응답(6)
迷茫

foo 函数里面的 this 还是 {id:23} 但是到了 setTimeout 接受的回掉里面, this 就变为了 window 所以就输出了全局的 0,第二个因为箭头函数,thisfoo2this 바인딩이므로 2

typecho

foo2의 setTimeout 매개변수는 화살표 함수이며, 그 안의 this는 런타임이 실행되는 범위를 가리키는 것이 아니라 바인딩이 정의된 범위(foo2가 실행될 때 호출의 객체임)입니다. . 일반적인 setTimeout의 함수는 런타임 범위(창)에 바인딩됩니다.

代言

1. foo 함수의 this는 window이고, foo2 함수의 this는 {id: 2} 객체입니다.

巴扎黑

분명히 첫 번째 this는 창을 가리키고 두 번째 화살표 함수는 현재 개체를 가리킵니다. 즉, 호출하는 사람이 호출하는 사람을 가리킵니다.
첫 번째 함수는 문제를 해결하기 위해 변경될 수 있습니다. 으아악

曾经蜡笔没有小新

1. setTimeout의 콜백 함수는 foo가 실행된 후 100ms 후에 실행되며 런타임 범위는 window입니다.
2. 화살표 함수를 사용하면 setTimeout에서 이것이 실행되는 범위를 가리키는 대신 정의된 범위에 바인딩될 수 있습니다.

伊谢尔伦

화살표 함수 범위의 문제

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿