(function () {} ()) 와function () {} 실례의 작용역 분석 (안에 문제가 많습니다...)
7055 단어 function
문제 보기:
1. 대상 글꼴 중 fn1 함수는 즉시 실행되는 함수 표현식입니다.
$(function(){
var number = 2;
var obj = {
number: 4,
fn1: (function(){
this.number *= 2;
number = number*2;
var number = 3;
return function(){
this.number *= 2;
number *= 3;
alert(number);
}
})()
};
var f = obj.fn1;
alert(number); /* 2 */
f(); /* 9 */
obj.fn1(); /* 27 */ /* ,number */
alert(window.number); /* NaN */
alert(obj.number); /* 8 */
})
</script>
출력 2, 9, 27, NaN, 8.
분석:
우선 fn1이라는 함수를 보면 즉시 실행되는 함수 표현식이기 때문에 var f=obj.fn1 때 fn1 함수 아래에 접근했습니다.지금 실행 함수 표현식 fn1에서this.number는 NaN입니다. 여기에서 자신의 속성과 방법을 방문할 수 없기 때문입니다.number =number*2는 NaN입니다. number는 undefined이기 때문에 미리 해석한 바에 따라 varnumber를 정의합니다.number= number *2; number = 3.다음은 varnumber=3을 정의했습니다. 이 작용역과 내부 작용역에서number는 잠시 3입니다.return function () {}에서 외부에서 즉시 실행되는 함수 표현식 때문에this.number는 유효합니다(구해...),number =number *3은 외부 작용역number 값에 따라 결정됩니다.
alert(number);출력 2, 사전 해석 때문에.
f();출력 9, 외부 number가 3이기 때문에 3*3 = 9.
obj.fn1();출력 27, 즉각 실행 함수이기 때문에 모든 변수 값을 저장하는 작용이 있습니다.number 값은 9이고 9*3=27을 사용합니다.
alert(window.number);NaN을 출력합니다. 불러온 후에 출력하기 때문에 윈도우를 출력합니다.number는 유효합니다. 국부 작용 영역 내에서만 가능합니다.
alert(obj.number);출력 8, fn1에서this.number 실효,return function () 중this.number가 유용하기 때문에return 함수의this만 실행합니다.number *= 2.
2. 대상 글꼴 중 fn1 함수는 즉시 실행되는 함수 표현식이 아닙니다.
$(function(){
var number = 2;
var obj = {
number: 4,
fn1: function(){
this.number *= 2;
number = number*2;
var number = 3;
return function(){
this.number *= 2;
number *= 3;
alert(number);
}
}
};
var f = obj.fn1();
alert(number); /* 2 */
f(); /* 9 */
obj.fn1()(); /* 9 */ /* , , , */
alert(window.number); /* NaN */
alert(obj.number); /* 16 */
})
출력 2, 9, 9, NaN, 16.
분석:
우선 fn1이라는 함수를 보면 함수 인용 (호출해야 실행) 이기 때문에 var f=obj.fn1 () (뒤에 괄호를 연결해야 할 때) fn1 함수 아래에 접근했습니다.지금 실행 함수 표현식 fn1에서this.number는 유효합니다. 일반 함수에서 자신의 속성과 방법에 접근할 수 있습니다.number =number*2는 NaN입니다. number는 undefined이기 때문에 미리 해석한 바에 따라 varnumber를 정의합니다.number= number *2; number = 3.다음은 var number = 3을 정의했습니다.return function () {}에서 외부 함수는 일반 함수이기 때문에this.number는 무효입니다 (구해...),number =number *3은 외부 작용역number 값에 따라 결정됩니다.
alert(number);출력 2, 사전 해석 때문에.
f();출력 9, 외부 number가 3이기 때문에 3*3 = 9.
obj.fn1()();출력 9, f () 와 같은 작용역에 없기 때문에, fn1 () 초기화number = 3을 호출하고, 뒤에 obj를 출력합니다.fn1 () () 또는 9입니다.
alert(window.number);NaN을 출력합니다. 불러온 후에 출력하기 때문에 윈도우를 출력합니다.number는 유효합니다. 국부 작용 영역 내에서만 가능합니다.
alert(obj.number);출력 16, fn1에서this.number 유용,return function () 중this.number가 효력을 잃었기 때문에 fn1 함수의this만 실행합니다.number *= 2.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콜백 함수를 Angular 하위 구성 요소에 전달이 예제는 구성 요소에 함수를 전달하는 것과 관련하여 최근에 직면한 문제를 다룰 것입니다. 국가 목록을 제공하는 콤보 상자 또는 테이블 구성 요소. 지금까지 모든 것이 구성 요소 자체에 캡슐화되었으며 백엔드에 대한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.