with
으로 시작하는 JavaScript 코드를 발견했습니다. 그것은 다소 혼란 스럽습니다. 그것은 무엇을하며 어떻게 올바르게 사용할 수 있습니까?"with"는 JavaScript에서 무엇을합니까?
return sObj.options[selectedIndex].value;
가 될 수 있습니다 :
with (sObj) return options[selectedIndex].value;
with
으로 시작하는 JavaScript 코드를 발견했습니다. 그것은 다소 혼란 스럽습니다. 그것은 무엇을하며 어떻게 올바르게 사용할 수 있습니까?"with"는 JavaScript에서 무엇을합니까?
return sObj.options[selectedIndex].value;
가 될 수 있습니다 :
with (sObj) return options[selectedIndex].value;
이 블록에 포함 된 문장의 범위에 추가
귀하의 경우에는with (sObj)
return options[selectedIndex].value;
, 그것은 훨씬을 넣은 사람은 아니다. .. 다음을 고려하십시오 :
var a, x, y;
var r = 10;
a = Math.PI * r * r;
x = r * Math.cos(PI);
y = r * Math.sin(PI /2);
되십시오 :
var a, x, y;
var r = 10;
with (Math) {
a = PI * r * r;
x = r * cos(PI);
y = r * sin(PI/2);
}
... 몇 가지 키 입력이 저장됩니다. 모질라 문서가 실제로 (장점과 그것을 사용의 단점과 함께) 좀 더 구체적으로 일을 설명 꽤 좋은 직장을 수행
나는 때문에 성능 문제의이를 사용하지 않는 것이 좋습니다,하지만 것입니다 무슨 위의 수단은 다음과 같습니다 : (여기서는 아마도 선택 요소 임)
(이 요소는 아마도 선택 요소 임)이 개체에서 참조되는 모든 자식 및 속성은 중괄호 사이에서 부모 범위로 처리됩니다.
이것은 (편집하기 전에 제목 제목에 표시된 것처럼) 기능이 아니라 진술입니다. 코드 샘플과 같이 포맷하면 그것은 더 의미가 있습니다
with (sObj){
return options[selectedIndex].value;
}
이 (Source를) 무엇에 관한
with 문은 명령문 세트에 대한 기본 객체를 설정합니다. JavaScript는 명령. 세트 내의 규정되지 않은 이름을 찾아 이름이 기본 오브젝트의 특성인지 판별합니다. 규정되지 않은 이름이 특성과 일치하면 특성에서 특성이 사용됩니다. 그렇지 않으면 국지 또는 전역 변수가 사용됩니다.
코드 샘플에서 options
이 sObj
의 속성인지 먼저 확인합니다. 그 다음 경우 options
는 sObj.options
을 의미 그렇지 않으면 이름 options
with
문을 사용의 단점에 의해 정의 된 변수에 대해 다른 범위를 확인 그냥 액세스됩니다 어떤 코드를이기는에서 아는 것은 불가능하다는 것이다.이 입력 필요 없다 블록과 그에서 this article
같이 다른 더 나은 대안은 다음과 같습니다
sObj.options[selectedIndex].value
을하지만 당신은 사용할 수 있습니다
options[selectedIndex].value
그
에 해당return sObj.options[selectedIndex].value;
With
conte에서 문장 블록을 실행할 수 있습니다. 특정 객체의 xt. 따라서 with
블록의 모든 문장은 괄호 안에있는 객체의 구성원으로 간주됩니다.
이렇게하면 변수 참조가 sObj 또는 global 중 하나 일 수 있기 때문에 코드를보다 쉽게 읽을 수 있습니다. 그러나 또한 모호함을 유발할 수 있습니다.
: Dwith
문은 순수 구문 설탕이지만, 그것은 또한 성가신 버그가 발생할 수 있습니다.
는 설명을위한 with Statement Considered Harmful를 참조하십시오 : 당신이 프로그램을 읽고 당신이 그것을 할 것입니다 무엇인지 확신 할 수없는 경우
, 당신은 제대로 작동하는 것입니다 확신을 가질 수 없습니다. 이러한 이유 때문에
with
문은 피해야합니다. 귀하의 예는 다음과 같이 다시 작성할 수 있습니다
++는 'with'의 단점을 언급하기 위해 –
... 제공된 객체의 범위에서 문 장소 '와'모든 관련된 계산서 등
return sObj.options[selectedIndex].value;
...
. 이 경우 꽤 무의미하지만 'sObj'에 대해 많은 작업을 수행하는 경우 많은 타이핑을 절약 할 수 있습니다.완전히 허구 예를
..with (sObj)
{
if(options[selectedIndex].value < 10){
options[selectedIndex].value++;
total+ = options[selectedIndex].value;
}
}
그러나, 그것은 종종 절약 입력이 더 나은 방법으로 달성 할 수있는 경우이다,라고하는 데.
VBA와 마찬가지로 사용이 불편합니다. 파이썬에서는 일회용 객체를 정리할 수 있습니다. C#에서는 using이라고 부릅니다. –
+1 - 안녕 저스틴 - 좋은 설명 –
@ 마크 - 감사. 그래도이 '사용하지 않기를 제안'조항을 포함시켜야하는 것 같습니다. –