> 웹 프론트엔드 > JS 튜토리얼 > JavaScript_javascript 팁에서 with 문을 사용하는 방법에 대해

JavaScript_javascript 팁에서 with 문을 사용하는 방법에 대해

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-05-16 18:06:43
원래의
1085명이 탐색했습니다.

Java 및 .NET을 사용해 본 학생들은 패키지나 네임스페이스의 개념에 익숙해야 합니다. 이 개념으로 인해 코드의 단순성과 가독성이 보장됩니다. JavaScript의 시작 부분에 with 문이 어떻게 배치되었는지 알 수 없습니다. 개인적으로는 어느 정도 유사성이 있다고 생각합니다. 예를 들면

코드 복사 코드는 다음과 같습니다. :

apple .banana.candy.dog.egg.fog.god.huh.index = 0
doSomething(apple.banana.candy.dog.egg.fog.god.huh .index);

with 문을 사용하면 다음과 같은 코드로 작성할 수 있습니다.
코드를 복사하세요 코드는 다음과 같습니다.

with(apple.banana.candy.dog.egg.fog.god.huh) {
c = 0
doSomething( index);

멋져 보이지만 치명적인 결함이 있습니다.

1. 구문

코드 복사 코드는 다음과 같습니다.
var root = {
branch : {
node: 1
}
};

with(root.branch) {
node = 0
// 0을 표시합니다.
Alert(node);
}
// 0을 표시합니다!
alert(root.branch.node)

2. with 문

코드 복사 코드는 다음과 같습니다.
var root = {
branch: {
노드: 1
}
};

with(root.branch) {
root.branch.node = 0
// 0 표시 , 맞습니다!
}
// 0을 표시합니다.
alert(root.branch.node)


테스트 1 후 테스트 2는 얼핏 보면 문제가 없지만... 테스트 3을 봐주세요.

3. with 문 내부의 객체 부모 노드를 통해 값을 수정합니다


var root = {
branch: {
node: 1
}
};

with(root.branch) {
root.branch = {
node: 0
}// 1 표시, 틀렸습니다!
alert(node);
}
// 0을 표시합니다.
alert(root.branch.node);


위에서 볼 수 있습니다. 테스트 3에서는 with 문 내부 노드의 상위 노드가 수정된 후에는 노드 자체와 동기화되지 않습니다. 즉, 내부 값과 외부 값의 일관성을 보장할 수 없다는 문제가 발생할 수 있습니다. 프로젝트에 고도로 숨겨진 버그가 있습니다.
그렇다면 어떻게 해야 할까요? 긴 일련의 단계별 접근을 받아들여야 할까요, 아니면 다른 방법이 있을까요?

참고할 수 있는 방법이 있을까요? 별칭을 통해 노드 개체를 다음과 같이 상위 노드로 호출합니다.



코드 복사 코드는 다음과 같습니다. var root = {
분기: {
노드: 1
}
}

var quote = root.branch
quote.node; = 0;
/ / 0을 표시합니다!
alert(root.branch.node)


with 문을 사용하는 사람은 거의 없을 것이라고 생각합니다. 이 키워드는 문제가 있는 표현이고 전혀 사용되어서는 안된다고 느껴서 이를 기록하기 위해 짧은 글을 썼습니다.
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿