문제

프로그램에서 내 코드 순서에 문제가 있습니다. 지금은 IN에 몇 가지가 있습니다 document.ready(function() { } ); 그리고 그것의 일부는 그것의 측면에서. 내 코드를 구성하거나 개선하기 위해 무엇이든 움직일 때마다 나는 무언가를 깨뜨릴 것입니다. 나는 선언 또는 액세스 수준의 순서로 인해 추측하고 있습니다 (예 : 외부의 무언가. document.ready(function {}); 그 안에 무언가에 액세스 할 수 없습니다.

자바 스크립트가 현명하게 위치 해야하는 곳에 대한 통찰력이 있습니까?

모든 것이 안에 있어야합니다 document.ready(function() {});?
외부에 무언가를 가질 이유가 있습니까? document.ready(function() {});?
코드는 내부입니다 document.ready(function() {}); 외부 코드로 접근 할 수 없습니까?

도움이 되었습니까?

해결책

1 . 모든 것이 문서 안에 있어야한다.

아니요, 문서. 준비 기능은 사물을 초기화하고 이벤트 핸들러를 할당하는 것 등만이어야한다고 생각합니다.

2. document.ready (function () {});?

코드 업체 및 더 나은 코드 구성.

삼 . document.ready (function () {})의 코드입니다. 외부 코드로 접근 할 수 없습니까?

예, 문서에 생성 된 변수와 객체는 외부 범위에서 접근 할 수 없습니다.

다른 팁

모든 것이 문서 안에 있어야한다.

예 그리고 아니오. 대규모 JavaScript 응용 프로그램에서는 메인 컨트롤러를이 이벤트 핸들러의 글로벌 범위로 초기화합니다. 그러나 DOM이 준비 될 때까지 기다릴 필요가없는 코드가 있습니다. DOM에 의존하지 않는 코드. 나는 그것이 매우 간단하다고 생각합니다. 예를 들어,이 이벤트 핸들러 이외의 구성 객체 클래스, 기능 등을 선언합니다.

document.ready (function () {});?

물론, 그 이유는 위의 손길이 있습니다. 주로 DOM 상호 작용이 필요하지 않은 코드는 DOM이로드 될 때까지 기다리지 않아야합니다. 특히 DOM로드 (예 : 기능 정의, 구성 객체 등)와 비동기로 실행할 수있는 경우.

또한 하나의 이벤트 핸들러에 모든 코드를 포함시키지 않으면 내용을보다 정리하고 코드를 모듈화하고 적절한 설계 패턴을 사용할 수 있습니다.

document.ready (function () {})의 코드입니다. 외부 코드로 접근 할 수 없습니까?

다시, 그렇습니다. 당신이 그것을 로컬로 선언한다면 var 그렇다면 이벤트 핸들러에 로컬이므로 외부 범위에 의해 접근 할 수 없습니다. 그렇지 않으면 글로벌 범위에 있으며 외부 범위에 액세스 할 수 있습니다. 다음은 예입니다 (여기에 호스팅됩니다 : http://jsbin.com/uriqe)

자바 스크립트

var foo = function() {
  alert(global);
  return false;
}

$(document).ready(function() {
  global = "you can see me!?";
  alert("global is initiated");
});

HTML

<body>
  <p><a href="#" onclick="foo()">click me</a></p>
</body>

onclick 눈에 띄지 않는 방법 이벤트 첨부 대신 $(document).ready() 의도적으로 질문/논쟁을 피하기 위해 의도적으로 사용됩니다. foo 접근 할 수 있습니다 global 폐쇄 속성을 통해.

편집하다: 나는 이전 문장에서 그것을 명확하게했다고 생각했지만 onclick 글로벌 범위와 폐쇄 속성 사이의 혼란을 피하기 위해 의도적으로 사용되지만 나는 사용을 옹호하지 않습니다 onlick. 물론 그것은 나쁜 연습이며 당신은 그것을 사용해서는 안됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top