No código-fonte require.js (linha 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.
*/
A define()
função aceita dois parâmetros opcionais (uma sequência que representa um ID do módulo e uma matriz de módulos necessários) e um parâmetro necessário (um método de fábrica).
O retorno do método de fábrica DEVE retornar a implementação do seu módulo (da mesma maneira que o Padrão do Módulo ).
A require()
função não precisa retornar a implementação de um novo módulo.
Usando define()
você está perguntando algo como "execute a função que eu estou passando como parâmetro e atribua os retornos ao ID que estou passando, mas antes verifique se essas dependências estão carregadas" .
Usando require()
você está dizendo algo como "a função que eu passo tem as seguintes dependências, verifique se essas dependências foram carregadas antes de executá-la" .
A require()
função é onde você usa seus módulos definidos, para garantir que os módulos estejam definidos, mas você não está definindo novos módulos lá.