답변:
require.js 소스 코드 (1902 행)에서 :
/**
* The function that handles definitions of modules. Differs from
* require() in that a string for the module should be the first argument,
* and the function to execute after dependencies are loaded should
* return a value to define the module corresponding to the first argument's
* name.
*/
이 define()
함수는 두 개의 선택적 매개 변수 (모듈 ID 및 필수 모듈 배열을 나타내는 문자열)와 하나의 필수 매개 변수 (공장 방법)를 허용합니다.
팩토리 메소드의 반환은 반드시 모듈 패턴 과 같은 방식으로 모듈의 구현을 반환 해야 합니다 .
이 require()
함수는 새 모듈의 구현을 반환하지 않아도됩니다.
define()
당신을 사용하여 "매개 변수로 전달하는 함수를 실행하고 전달중인 ID에 반환 값을 할당하지만 이전에 이러한 종속성이로드되었는지 확인하십시오" 와 같은 것을 묻습니다 .
사용 require()
하면 같은 말을 "나는 통과하는 기능은 다음 종속성이를, 이러한 종속성이 그것을 실행하기 전에로드되었는지 확인" .
이 require()
기능은 모듈이 정의되었는지 확인하기 위해 정의 된 모듈을 사용하는 곳이지만 새 모듈을 정의하지는 않습니다.
define()
있을 때까지 모듈의 팩토리 기능 (에 전달 된 기능)을 실행하지 않습니다 require([])
." github.com/jrburke/requirejs/wiki/…
모듈 정의를 용이하게하기위한 "정의"방법 및 종속성 로딩을 처리하기위한 "필수"방법
define은 다음 서명을 사용하여 제안을 기반으로 명명 된 또는 명명되지 않은 모듈을 정의하는 데 사용됩니다.
define(
module_id /*optional*/,
[dependencies] /*optional*/,
definition function /*function for instantiating the module or object*/
);
반면에 require는 일반적으로 의존성을 동적으로 가져 오려면 최상위 JavaScript 파일 또는 모듈 내에서 코드를로드하는 데 사용됩니다
자세한 내용은 https://addyosmani.com/writing-modular-js/ 를 참조하십시오.
일반적인 규칙:
재사용 할 모듈을 정의 할 때 define을 사용합니다.
당신은 단순히 의존성을로드하는 데 필요합니다
//sample1.js file : module definition
define(function() {
var sample1 = {};
//do your stuff
return sample1;
});
//sample2.js file : module definition and also has a dependency on jQuery and sample1.js
define(['jquery', 'sample1'], function($,sample1) {
var sample2 = {
getSample1:sample1.getSomeData();
};
var selectSomeElement = $('#someElementId');
//do your stuff....
return sample2;
});
//calling in any file (mainly in entry file)
require(['sample2'], function(sample2) {
// sample1 will be loaded also
});
이것이 도움이되기를 바랍니다.