위 코드 실행창 결과는 왜 나오는 걸까요?
欢迎选择我的课程,让我们一起见证您的进步~~
obj.getFoo() 返回一个方程,赋值给了 f 。f 通过 f() 被调用,没有明确的调用者,所以 this 就是 window .
obj.getFoo()
f()
window
"obj"를 얻으려면 이렇게 하면 됩니다
왜냐하면 f()实际运行的地方,this是window,由于没有通过call或者bind改变上下文,所以输出的就是window에.
this
call
bind
다음과 같이 교체할 수 있습니다:
여기self就是指向window了,所以return self.foo就是return window.foo,也就是'window'.
self
return self.foo
return window.foo
'window'
사실 가장 간단한 이해는 obj.getFoo가 f를 제공한 다음 이 메서드가 실행되는 위치를 살펴보는 것입니다.
f() in console.log(f()) 는 독립적으로 호출됩니다. 1. 호출자 함수가 개체에 의해 소유된 경우 함수가 호출되면 내부 this가 개체를 가리킵니다. 2. 함수가 독립적으로 호출되면 함수 내부의 this는 정의되지 않음을 가리킵니다. 추천도서 http://www.jianshu.com/p/d647... 도움이 되셨으면 좋겠습니다
함수 실행, 함수 본문의 이 항목은 함수 호출자를 가리킵니다
1. 다음 코드에서 getFoo 함수의 호출자는 obj이므로 getFoo 함수 내부의 이는 obj 객체를 가리킵니다
2. getFoo 함수는 익명 함수를 반환하고 이를 변수 f에 할당한 다음 함수 f를 실행합니다. 이때 함수 f의 호출자는 윈도우입니다. f 함수 내부에서도 창을 가리킵니다
obj.getFoo()
返回一个方程,赋值给了 f 。f 通过
f()
被调用,没有明确的调用者,所以 this 就是window
."obj"를 얻으려면 이렇게 하면 됩니다
으아악왜냐하면
f()
实际运行的地方,this
是window
,由于没有通过call
或者bind
改变上下文,所以输出的就是window
에.다음과 같이 교체할 수 있습니다:
으아악여기
self
就是指向window
了,所以return self.foo
就是return window.foo
,也就是'window'
.사실 가장 간단한 이해는 obj.getFoo가 f를 제공한 다음 이 메서드가 실행되는 위치를 살펴보는 것입니다.
으아악f() in console.log(f()) 는 독립적으로 호출됩니다.
1. 호출자 함수가 개체에 의해 소유된 경우 함수가 호출되면 내부 this가 개체를 가리킵니다.
2. 함수가 독립적으로 호출되면 함수 내부의 this는 정의되지 않음을 가리킵니다.
추천도서 http://www.jianshu.com/p/d647... 도움이 되셨으면 좋겠습니다
함수 실행, 함수 본문의 이 항목은 함수 호출자를 가리킵니다
1. 다음 코드에서 getFoo 함수의 호출자는 obj이므로 getFoo 함수 내부의 이는 obj 객체를 가리킵니다
으아악2. getFoo 함수는 익명 함수를 반환하고 이를 변수 f에 할당한 다음 함수 f를 실행합니다. 이때 함수 f의 호출자는 윈도우입니다. f 함수 내부에서도 창을 가리킵니다
으아악