>  Q&A  >  본문

javascript - js 호출 문제, 매우 간단한 코드, 출력 결과를 해석하는 방법은 무엇입니까?

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

으아악

</script>

실행 결과:
0
2

phpcn_u1582phpcn_u15822648일 전683

모든 응답(6)나는 대답할 것이다

  • 迷茫

    迷茫2017-06-26 10:52:10

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

    회신하다
    0
  • typecho

    typecho2017-06-26 10:52:10

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

    회신하다
    0
  • 代言

    代言2017-06-26 10:52:10

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

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-06-26 10:52:10

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

    회신하다
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-26 10:52:10

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

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-26 10:52:10

    화살표 함수 범위의 문제

    회신하다
    0
  • 취소회신하다