찾다
웹 프론트엔드JS 튜토리얼JavaScript 모듈러 프로그래밍(참고)_javascript 기술

저는 JS에 대한 지식이 거의 없었기 때문에 최근에 이 문제를 접했습니다. 그래서 아직 완전히 이해하지 못해서 먼저 글을 올립니다.

1장 JavaScript 모듈러 프로그래밍

(1): 모듈 작성 방법

원작 1개
// 모듈은 특정 기능을 구현하는 메서드 집합입니다. 다양한 기능(및 상태를 기록하는 변수)을 간단히 모아두면 모듈입니다. 함수 m1(){
               // ...
}
함수 m2(){
               // ...
}
// 위의 함수 m1()과 m2()는 모듈을 구성합니다. 사용 시 직접 호출하면 됩니다.
// 단점: "오염된" 전역 변수; 변수 이름이 다른 모듈과 충돌하지 않는다는 보장이 없으며 모듈 멤버 간에 직접적인 관계가 없습니다.

2가지 객체 작성 방법


// 把模块写成一个对象,所有的模块成员都放到这个对象里面;
  var module = new Object({
    _count:0,
    m1:function(){
      // ...
    },
    m2:function(){
      // ...
    }
  });
// 上面的函数m1()和m2(),都封装在module对象里;使用时直接调用这个对象的属性;
  module.m1();
// 但是,这样的写法会暴露所有模块成员,内部状态可以被外部改写;
  module._count = 4;
3 즉시실행 함수 작성 방법


  var module = (function(){
    var _count = 0;
    var m1 = function(){
      // ...
    };
    var m2 = function(){

    };
    return {
      m1:m1,
      m2:m2
    };
  })();
// 使用上面的写法,外部代码无法读取内部的_count变量;
  console.info(module._count); // undefined;
// 上面的写法就是JavaScript模块的基本写法;

4가지 확대/축소 모드


// 如果模块很大,必须分成几个部分,或者一个模块需要继承另一个模块,这时就有必要采用"放大模式";
  var module = (function(mod){
    mod.m3 = function(){
      // ...
    };
    return mod;
  })(module);
// 上面的代码为module模块添加了一个新方法m3(),然后返回新的module模块;
5가지 와이드 줌 모드


// 在浏览器环境中,模块的各个部分通常都是从网上获取的,有时无法知道哪个部分会先加载;
// 如果采用上一节的写法,第一个执行的部分有可能加载一个不存在的空对象,这时就要采用"宽放大模式";
  var module = (function(mod){
    // ...
    return mod;
  })(window.module || {});
// 与"放大模式"相比,"宽放大模式"就是"立即执行函数"的参数可以是空对象;
6 전역 변수 입력


2장 JavaScript 모듈형 프로그래밍(2): AMD 사양

1개 모듈 사양
// 현재 널리 사용되는 JavaScript 모듈 사양은 CommonJS와 AMD 두 가지가 있습니다.

2개의 CommonJS
// node.js는 서버 측 프로그래밍에 JavaScript 언어를 사용하며, 이는 "JavaScript 모듈형 프로그래밍"의 공식적인 탄생을 의미합니다.
// node.js의 모듈 시스템은 CommonJS 사양을 참조하여 구현됩니다.
CommonJS에는 모듈 로딩을 위한 전역 메소드 require()가 있습니다. var math = require('math'); var math = require('math'); // 모듈 로드;
Math.add(2,3); // 모듈 메소드 호출 =>5;

3 브라우저 환경

// 이전 섹션의 코드는 브라우저에서 실행할 때 큰 문제가 있습니다.
var 수학 = require('math');
Math.add(2,3);
// 문제: math.add(2,3) 전에 math.js가 require('math')에 로드될 때까지 기다려야 합니다.
// 따라서 브라우저 모듈은 "동기 로딩"을 사용할 수 없으며 "비동기 로딩"만 사용할 수 있습니다;==>AMD;

AMD 4개

AMD(Asynchronous Module Definition) 비동기 모듈 정의;
// 비동기식 모듈 로딩을 사용합니다. 모듈 로딩은 후속 명령문의 실행에 영향을 주지 않습니다. 이 모듈에 의존하는 모든 명령문은 콜백 함수
에 정의되어 있습니다. // 이 콜백 함수는 로딩이 완료될 때까지 실행되지 않습니다.
// AMD는 또한 require() 문을 사용하여 모듈을 로드하지만 두 개의 매개변수가 필요합니다:
​ require([모듈],콜백);
// 모듈: 배열이며, 내부 멤버는 로드할 모듈입니다.
// 콜백: 로드 성공 후의 콜백 함수입니다.
​ require(['math'],function(math){
Math.add(2,3);
});
// math.add()와 수학 모듈 로딩이 동기화되지 않아 브라우저가 정지되지 않으므로 AMD가 브라우저 환경에 더 적합합니다.
3장 JavaScript 모듈형 프로그래밍(3): require.js 사용법

1. require.js를 사용하는 이유

// 여러 개의 js 파일을 순서대로 로드해야 합니다.
// 단점:
// 1. 로드할 때 브라우저는 웹 페이지 렌더링을 중지합니다. 더 많은 파일을 로드할수록 웹 페이지의 응답이 길어집니다.
// 2. js 파일 간의 종속성으로 인해 로딩 순서가 엄격하게 보장되어야 합니다. 종속성이 복잡하면 코드 작성 및 유지 관리가 어려워집니다.
// 따라서 require.js는 다음 두 가지 문제를 해결합니다.
// 1. 웹페이지의 응답 손실을 방지하기 위해 js 파일의 비동기 로딩을 구현합니다.
// 2. 코드 작성 및 유지 관리를 용이하게 하기 위해 모듈 간의 종속성을 관리합니다.

2 require.js 로딩

1. require.js를 로드하세요
// async 속성은 웹 페이지의 응답 손실을 방지하기 위해 이 파일을 비동기적으로 로드해야 함을 나타냅니다. IE는 이 속성을 지원하지 않으므로 defer도 작성하세요. 2. main.js 로드

// data-main 속성의 기능은 웹 프로그램의 기본 모듈을 지정하는 것입니다. => 이 파일은 require.js에 의해 가장 먼저 로드됩니다. // require.js의 기본 파일 접미사는 js이므로 main.js는 main으로 축약할 수 있습니다.


3 메인 모듈 main.js 작성 방법

1. main.js가 다른 모듈에 의존하지 않는 경우 JavaScript 코드를 직접 작성할 수 있습니다. //메인.js

Alert('로드 성공!');

2. main.js가 모듈에 의존하는 경우 AMD 사양에 정의된 require() 함수를 사용해야 합니다. //메인.js
​ require(['moduleA','moduleB','moduleC'],function(moduleA,moduleB,moduleC){
               // ...
})
// require() 함수는 두 개의 매개변수를 받습니다:
// 매개변수 1: 배열, 의존하는 모듈, 즉 메인 모듈이 의존하는 세 개의 모듈을 나타냅니다.
//매개변수 2: 이전에 지정한 모든 모듈이 성공적으로 로드된 후 호출되는 콜백 함수는 로드된 모듈이 함수에 매개변수로 전달되므로 이러한 모듈을 콜백 함수 내에서 사용할 수 있습니다. // require()는 모듈을 비동기적으로 로드하며 브라우저는 응답을 잃지 않습니다. 지정된 콜백 함수는 이전 모듈이 성공적으로 로드된 후에만 실행되어 종속성 문제를 해결합니다. 예:
​ require(['jquery','underscore','backbone'],function($,_,Backbone){
               // ...
});

4개의 모듈 로딩
//require.config() 메소드를 사용하여 모듈의 로딩 동작을 사용자 정의하세요.
// require.config()는 메인 모듈(main.js)의 선두에 작성됩니다.
// 매개변수는 객체이며, 이 객체의 paths 속성은 각 모듈의 로딩 경로를 지정합니다.
// 기본적으로 main.js와 동일한 디렉터리를 사용하도록 다음 세 모듈의 파일을 설정합니다. ​ require.config({
        경로:{
"jquery":"jquery.min",
"밑줄":"underscore.min",
"백본":"backbone.min"
}
});

// 로드된 모듈과 메인 모듈이 같은 디렉토리에 있지 않다면 경로를 하나씩 지정해야 합니다.

​ require.config({
        경로:{
"jquery":"lib/jquery.min",
"밑줄":"lib/underscore.min",
"백본":"lib/backbone.min"
}
});
// 또는 기본 디렉터리(baseUrl)를 직접 변경합니다
​ require.config({
        baseUrl:"js/lib",
        경로:{
"jquery":"jquery.min",
"밑줄":"underscore.min",
"백본":"backbone.min"
}
});

// 모듈이 다른 호스트에 있는 경우 해당 URL을 직접 지정할 수도 있습니다

​ require.config({
        경로:{
"jquery":"https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min"
}
});
// require.js에서는 각 모듈이 별도의 js 파일이어야 합니다. 이 경우 여러 모듈이 로드되면 여러 HTTP 요청이 실행되어 웹페이지 로딩 속도에 영향을 미칩니다. // 따라서 require.js는 모듈이 배포된 후 이 도구를 사용하여 여러 모듈을 하나의 파일로 병합하여 HTTP 요청 수를 줄일 수 있습니다.

5개의 AMD 모듈 작성 방법

// require.js에 의해 로드되는 모듈은 AMD 사양을 채택합니다. 즉, 모듈은 AMD 규정에 따라 작성되어야 합니다. // 구체적으로 모듈은 특정 정의() 함수를 사용하여 정의해야 합니다. 모듈이 다른 모듈에 종속되지 않으면 정의() 함수에서 직접 정의할 수 있습니다. // math.js에 수학 모듈을 정의합니다

// math.js

정의(함수(){
        var add = 함수(x,y){
               x y 반환;
        };
         반품 {
              추가:추가
        };
});
//main.js에 수학 모듈을 로드합니다
​ require(['math'],function(math){
경고(math.add(1,1));
});
// 이 모듈이 다른 모듈에도 의존하는 경우, 정의() 함수의 첫 번째 매개변수는 모듈의 종속성을 나타내는 배열이어야 합니다.
// math.js
정의(['myLib'],함수(myLib){
         기능 foo(){
myLib.doSomething();
}
         반품 {
foo:foo
        };
});
// require() 함수가 위 모듈을 로드하면 myLib.js 파일이 먼저 로드됩니다.


6 비표준 모듈 로딩

// 비표준 모듈을 로드하려면 require()를 사용하여 로드하기 전에 먼저 require.config() 메서드를 사용하여 일부 특성을 정의해야 합니다.
​ require.config({
심:{
             '밑줄':{
                   내보내기:'_'
            },
            '백본':{
               deps:['underscore','jquery'],
내보내기:'백본'
            }
}
});
// require.config()는 앞서 언급한 paths 속성 외에도 특히 호환되지 않는 모듈을 구성하는 데 사용되는 shim 속성을 받습니다. // (1) 모듈의 종속성을 나타내기 위해 deps 배열을 정의합니다. // (2) 외부에서 호출될 때 이 모듈의 이름을 나타내는 내보내기 값(출력 변수 이름)을 정의합니다. 예: jQuery 플러그인
심:{
          'jquery.scroll':{
           deps:['jquery'],
내보내기:'jQuery.fn.scroll'
}
};

7가지 require.js 플러그인

1.domready: 페이지 DOM 구조가 로드된 후 콜백 함수를 실행할 수 있습니다.

​ require(['domready!'],function(doc){

               // DOM이 준비되면 호출됩니다.

})  
2.텍스트 및 이미지: require.js가 텍스트 및 이미지 파일을 로드하도록 허용합니다.
Define(['text!review.txt','image!cat.jpg'],function(review,cat){
console.log(검토);
           document.body.appendChild(cat);
});

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Next.js (백엔드 통합)로 멀티 테넌트 SAAS 애플리케이션 구축Next.js (백엔드 통합)로 멀티 테넌트 SAAS 애플리케이션 구축Apr 11, 2025 am 08:23 AM

일상적인 기술 도구를 사용하여 기능적 다중 테넌트 SaaS 응용 프로그램 (Edtech 앱)을 구축했으며 동일한 작업을 수행 할 수 있습니다. 먼저, 다중 테넌트 SaaS 응용 프로그램은 무엇입니까? 멀티 테넌트 SAAS 응용 프로그램은 노래에서 여러 고객에게 서비스를 제공 할 수 있습니다.

Next.js (Frontend Integration)를 사용하여 멀티 테넌트 SaaS 응용 프로그램을 구축하는 방법Next.js (Frontend Integration)를 사용하여 멀티 테넌트 SaaS 응용 프로그램을 구축하는 방법Apr 11, 2025 am 08:22 AM

이 기사에서는 Contrim에 의해 확보 된 백엔드와의 프론트 엔드 통합을 보여 주며 Next.js를 사용하여 기능적인 Edtech SaaS 응용 프로그램을 구축합니다. Frontend는 UI 가시성을 제어하기 위해 사용자 권한을 가져오고 API가 역할 기반을 준수하도록합니다.

JavaScript : 웹 언어의 다양성 탐색JavaScript : 웹 언어의 다양성 탐색Apr 11, 2025 am 12:01 AM

JavaScript는 현대 웹 개발의 핵심 언어이며 다양성과 유연성에 널리 사용됩니다. 1) 프론트 엔드 개발 : DOM 운영 및 최신 프레임 워크 (예 : React, Vue.js, Angular)를 통해 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축합니다. 2) 서버 측 개발 : Node.js는 비 차단 I/O 모델을 사용하여 높은 동시성 및 실시간 응용 프로그램을 처리합니다. 3) 모바일 및 데스크탑 애플리케이션 개발 : 크로스 플랫폼 개발은 개발 효율을 향상시키기 위해 반응 및 전자를 통해 실현됩니다.

JavaScript의 진화 : 현재 동향과 미래 전망JavaScript의 진화 : 현재 동향과 미래 전망Apr 10, 2025 am 09:33 AM

JavaScript의 최신 트렌드에는 Typescript의 Rise, 현대 프레임 워크 및 라이브러리의 인기 및 WebAssembly의 적용이 포함됩니다. 향후 전망은보다 강력한 유형 시스템, 서버 측 JavaScript 개발, 인공 지능 및 기계 학습의 확장, IoT 및 Edge 컴퓨팅의 잠재력을 포함합니다.

Demystifying JavaScript : 그것이하는 일과 중요한 이유Demystifying JavaScript : 그것이하는 일과 중요한 이유Apr 09, 2025 am 12:07 AM

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.

Python 또는 JavaScript가 더 좋습니까?Python 또는 JavaScript가 더 좋습니까?Apr 06, 2025 am 12:14 AM

Python은 데이터 과학 및 기계 학습에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 간결한 구문 및 풍부한 라이브러리 생태계로 유명하며 데이터 분석 및 웹 개발에 적합합니다. 2. JavaScript는 프론트 엔드 개발의 핵심입니다. Node.js는 서버 측 프로그래밍을 지원하며 풀 스택 개발에 적합합니다.

JavaScript를 어떻게 설치합니까?JavaScript를 어떻게 설치합니까?Apr 05, 2025 am 12:16 AM

JavaScript는 이미 최신 브라우저에 내장되어 있기 때문에 설치가 필요하지 않습니다. 시작하려면 텍스트 편집기와 브라우저 만 있으면됩니다. 1) 브라우저 환경에서 태그를 통해 HTML 파일을 포함하여 실행하십시오. 2) Node.js 환경에서 Node.js를 다운로드하고 설치 한 후 명령 줄을 통해 JavaScript 파일을 실행하십시오.

Quartz에서 작업이 시작되기 전에 알림을 보내는 방법은 무엇입니까?Quartz에서 작업이 시작되기 전에 알림을 보내는 방법은 무엇입니까?Apr 04, 2025 pm 09:24 PM

쿼츠 타이머를 사용하여 작업을 예약 할 때 미리 쿼츠에서 작업 알림을 보내는 방법 작업의 실행 시간은 CRON 표현식에 의해 설정됩니다. 지금...

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 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

맨티스BT

맨티스BT

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

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.