찾다
웹 프론트엔드JS 튜토리얼구성 files_javascript 기술에 따라 js 종속 모듈 로드

요구사항:

아래 구성 파일에 따르면

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

모듈=[
{'이름':'jquery','src':'/js/lib/jquery-1.8.3.js'},
{'name':'swfobject','src':'/js/utils/swfobject.js'},
{'name':'fancybox','src':'/js/jquery/jquery.fancybox.js','require':['jquery']},
{'name':'uploadify','src':'/js/utils/uploadify.js','require':['swfobject']},
{'name':'jqform','src':'/js/jquery/jquery.form.js','require':['jquery']},
{'name':'register','src':'/js/page/reg.js','require':['jqform']},
{'name':'login','src':'/js/page/login.js','require':['fancybox','jqform']},
{'name':'upload','src':'/js/page/upload.js','require':['fancybox','jqform','uploadify']}
]

함수 작성

def getfiles(이름)

특정 이름으로 지정된 페이지, 로드할 js 파일 목록, 종속성이 있는 파일을 먼저 로드하려면 돌아가기

스낵 솔루션

이 질문은 언뜻 보면 간단해 보이지만 그렇지 않습니다.

종속 모듈의 로딩 타이밍에 어려움이 있습니다. A-B&C, B-C, 모듈 A는 모듈 B와 모듈 C에 종속되고, 모듈 B는 모듈 C에 종속되는 종속 관계가 있는 경우 C를 두 번 로드할 수 없습니다.

샤오차이가 제시한 해결책은 그냥 아이디어일 뿐입니다. 샤오차이는 이진 트리 같은 알고리즘으로 해결할 수 있을 거라 생각하지만, 샤오차이는 방법을 모릅니다~~~

이 알고리즘은 순환 종속성을 고려하지 않습니다.

코드는 다음과 같습니다.

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

/**
* 순환 종속성을 고려하지 않습니다
* @type {함수}
​*/
var loadModule = (함수(){
/**
* 비즈니스 로직 캡슐화
* @type {{chainHead: {}, chainCurrent: {}, srcCache: {}, main: main, 로드: 로드, findModule: findModule}}
​​*/
var 논리 = {
체인헤드: {}, // 링크
         chainCurrent: {}, //연결된 목록의 현재 노드
           srcCache: {},         //모듈 src 캐시
           /**
* 외부 인터페이스
* @param 모듈 구성 객체
* @param name 모듈 이름
* @returns {Array} 로드된 순서대로 정렬된 종속 모듈 목록
                       */
            주요: 기능(모듈, 이름){
            var nameArray = [], //모듈 이름 목록
Srcarray = [], // 의존 모듈 목록
Namestr = "", // 모듈 이름 문자열 집합
~ > 🎜> 나는 = 0;
//모든 종속 모듈을 대략적으로 로드
This.load(모듈, 이름)
//모듈 이름 문자열 세트 구성
This.chainCurrent = this.chainHead;
             동안(this.chainCurrent.next){
nameArray.push(this.chainCurrent.name);
This.chainCurrent = this.chainCurrent.next;
            }
                  nameStr = nameArray.join(" ") " " // 표준 통일, 끝에 공백 추가
                            // 종속 모듈 중복 제거
​​​​​​while(repeatRegex.exec(nameStr)){
nameStr = nameStr.replace(repeatRegex, function(g0, g1, g2){
                           return g0.substring(0, (g0.length - g2.length));
                  });
            }
                 nameStr = nameStr.substring(0, (nameStr.length - 1)) //추가 공백 제거
//종속 모듈 이름을 모듈 경로로 변환
nameArray = nameStr.split(" ");
for(i = 0; i                   srcArray.push(this.srcCache[nameArray[i]]);
            }
                 srcArray를 반환합니다.
         },
          /**
* 모듈을 재귀적으로 로드
* @param 모듈 구성 객체
* @param name 모듈 이름
           */
로드: 함수(모듈, 이름){
            var 노드 = {},
                       모듈 = this.findModule.call(모듈, "이름", 이름),
나는 = 0;
//모듈이 존재하는지 확인
If(!모듈){
throw Error("종속 모듈 " name "을 찾을 수 없습니다.");
            }
//모듈 종속성 목록 구성
                 node.name = 이름;
// node.src = module.src;
This.srcCache[이름] = module.src;
Node.next = this.chainHead;
This.chainHead = 노드;
//재귀적 의존성
If(module.require && module.require.length){
for(i = 0;i This.load(modules, module.require[i]);
                 }
            }
         },
           /**
* 지정된 속성명과 속성값을 기준으로 모듈을 검색합니다
* @param name 속성 이름
* @param value 속성값
* @returns {*}
                       */
           findModule: 함수(이름, 값){
            var 배열 = 이,
항목 = {},
나는 = 0;
//트래버스 모듈
for(i = 0; i 항목 = 배열[i];
//지정된 모듈을 가져옵니다
If(항목 && 항목[이름] === 값){
                            반품 상품;
                 }
            }
//찾을 수 없으며 null을 반환합니다
              null을 반환합니다.
         }
};
//외부 인터페이스 노출
반환함수(){
             return logics.main.apply(논리, 인수);
};
}());
 /**
  * 테스트 사용 사례
  * @type {*[]}
 */
 var 모듈=[
     {'이름':'jquery','src':'/js/lib/jquery-1.8.3.js'},
     {'name':'swfobject','src':'/js/utils/swfobject.js'},
     {'name':'fancybox','src':'/js/jquery/jquery.fancybox.js','require':['jquery']},
     {'name':'uploadify','src':'/js/utils/uploadify.js','require':['swfobject']},
     {'name':'jqform','src':'/js/jquery/jquery.form.js','require':['jquery']},
     {'name':'register','src':'/js/page/reg.js','require':['jqform']},
     {'name':'login','src':'/js/page/login.js','require':['fancybox','jqform']},
     {'name':'upload','src':'/js/page/upload.js','require':['fancybox','jqform','login','uploadify']}
 ];
 console.log(loadModule(modules, "업로드"));
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Python vs. JavaScript : 개발자를위한 비교 분석Python vs. JavaScript : 개발자를위한 비교 분석May 09, 2025 am 12:22 AM

Python과 JavaScript의 주요 차이점은 유형 시스템 및 응용 프로그램 시나리오입니다. 1. Python은 과학 컴퓨팅 및 데이터 분석에 적합한 동적 유형을 사용합니다. 2. JavaScript는 약한 유형을 채택하며 프론트 엔드 및 풀 스택 개발에 널리 사용됩니다. 두 사람은 비동기 프로그래밍 및 성능 최적화에서 고유 한 장점을 가지고 있으며 선택할 때 프로젝트 요구 사항에 따라 결정해야합니다.

Python vs. JavaScript : 작업에 적합한 도구 선택Python vs. JavaScript : 작업에 적합한 도구 선택May 08, 2025 am 12:10 AM

Python 또는 JavaScript를 선택할지 여부는 프로젝트 유형에 따라 다릅니다. 1) 데이터 과학 및 자동화 작업을 위해 Python을 선택하십시오. 2) 프론트 엔드 및 풀 스택 개발을 위해 JavaScript를 선택하십시오. Python은 데이터 처리 및 자동화 분야에서 강력한 라이브러리에 선호되는 반면 JavaScript는 웹 상호 작용 및 전체 스택 개발의 장점에 없어서는 안될 필수입니다.

파이썬 및 자바 스크립트 : 각각의 강점을 이해합니다파이썬 및 자바 스크립트 : 각각의 강점을 이해합니다May 06, 2025 am 12:15 AM

파이썬과 자바 스크립트는 각각 고유 한 장점이 있으며 선택은 프로젝트 요구와 개인 선호도에 따라 다릅니다. 1. Python은 간결한 구문으로 데이터 과학 및 백엔드 개발에 적합하지만 실행 속도가 느립니다. 2. JavaScript는 프론트 엔드 개발의 모든 곳에 있으며 강력한 비동기 프로그래밍 기능을 가지고 있습니다. node.js는 풀 스택 개발에 적합하지만 구문은 복잡하고 오류가 발생할 수 있습니다.

JavaScript의 핵심 : C 또는 C에 구축 되었습니까?JavaScript의 핵심 : C 또는 C에 구축 되었습니까?May 05, 2025 am 12:07 AM

javaScriptisNotBuiltoncorc; it'SangretedLanguageThatrunsonOngineStenWrittenInc .1) javaScriptWasDesignEdasAlightweight, 해석 hanguageforwebbrowsers.2) Endinesevolvedfromsimpleplemporectreterstoccilpilers, 전기적으로 개선된다.

JavaScript 응용 프로그램 : 프론트 엔드에서 백엔드까지JavaScript 응용 프로그램 : 프론트 엔드에서 백엔드까지May 04, 2025 am 12:12 AM

JavaScript는 프론트 엔드 및 백엔드 개발에 사용할 수 있습니다. 프론트 엔드는 DOM 작업을 통해 사용자 경험을 향상시키고 백엔드는 Node.js를 통해 서버 작업을 처리합니다. 1. 프론트 엔드 예 : 웹 페이지 텍스트의 내용을 변경하십시오. 2. 백엔드 예제 : node.js 서버를 만듭니다.

Python vs. JavaScript : 어떤 언어를 배워야합니까?Python vs. JavaScript : 어떤 언어를 배워야합니까?May 03, 2025 am 12:10 AM

Python 또는 JavaScript는 경력 개발, 학습 곡선 및 생태계를 기반으로해야합니다. 1) 경력 개발 : Python은 데이터 과학 및 백엔드 개발에 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 적합합니다. 2) 학습 곡선 : Python 구문은 간결하며 초보자에게 적합합니다. JavaScript Syntax는 유연합니다. 3) 생태계 : Python에는 풍부한 과학 컴퓨팅 라이브러리가 있으며 JavaScript는 강력한 프론트 엔드 프레임 워크를 가지고 있습니다.

JavaScript 프레임 워크 : 현대적인 웹 개발 파워JavaScript 프레임 워크 : 현대적인 웹 개발 파워May 02, 2025 am 12:04 AM

JavaScript 프레임 워크의 힘은 개발 단순화, 사용자 경험 및 응용 프로그램 성능을 향상시키는 데 있습니다. 프레임 워크를 선택할 때 : 1. 프로젝트 규모와 복잡성, 2. 팀 경험, 3. 생태계 및 커뮤니티 지원.

JavaScript, C 및 브라우저의 관계JavaScript, C 및 브라우저의 관계May 01, 2025 am 12:06 AM

서론 나는 당신이 이상하다는 것을 알고 있습니다. JavaScript, C 및 Browser는 정확히 무엇을해야합니까? 그들은 관련이없는 것처럼 보이지만 실제로는 현대 웹 개발에서 매우 중요한 역할을합니다. 오늘 우리는이 세 가지 사이의 밀접한 관계에 대해 논의 할 것입니다. 이 기사를 통해 브라우저에서 JavaScript가 어떻게 실행되는지, 브라우저 엔진의 C 역할 및 웹 페이지의 렌더링 및 상호 작용을 유도하기 위해 함께 작동하는 방법을 알게됩니다. 우리는 모두 JavaScript와 브라우저의 관계를 알고 있습니다. JavaScript는 프론트 엔드 개발의 핵심 언어입니다. 브라우저에서 직접 실행되므로 웹 페이지를 생생하고 흥미롭게 만듭니다. 왜 Javascr

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경