IIFE(Immediately Invoked Function Expression, μ¦μ μ€νλλ ν¨μ ννμ)
(function () {
statements
})();
- IIFEλ? ν¨μμ μ μΈκ³Ό λμμ μ¦μ μ€νλλ ν¨μμ λλ€. μΌμ’ μ κ΄νΈλ‘ λλ¬μΈμΈ μ΅λͺ ν¨μμ λλ€.
- μ΅λͺ ν¨μλ₯Ό μ μΈν κ²½μ° μ€λ₯κ° λ°μλ©λλ€.
function() {
console.log('my name is eun!');
} // Uncaught SyntaxError: Function statements require a function name
- μ΅λͺ ν¨μλ₯Ό κ΄νΈλ‘ λλ¬μΈκ² λλ©΄ μ΅λͺ ν¨μλ₯Ό λ°ννλ ν¨μκ° λ©λλ€.
(function() {
console.log('my name is eun!');
}) /* ƒ () {
console.log('my name is eun!');
} */
// ν¨μλ₯Ό κ·Έλλ‘ λ±μ΄λ
λλ€.
- λ°νλ ν¨μλ₯Ό λ°λ‘ μ€ννκ³ μΆλ€λ©΄, λ€μ κ΄νΈλ₯Ό νλ λ λΆμ΄λ©΄ λ©λλ€.
(function() {
console.log('my name is eun!');
})();
IIFEμ νμμ±
- λΆνμν λ³μλ₯Ό μΆκ°ν΄ μ μ μ€μ½νκ° μ§μ λΆν΄μ§λ κ²μ λ°©μ§ν©λλ€.
- IIFE λ΄λΆλ‘ λ€λ₯Έ λ³μλ€μ μ κ·Ό λ°©μ§ν©λλ€.
// IIFE λ΄λΆμμ μ μλ λ³μλ μΈλΆ λ²μμμ μ κ·Όμ΄ λΆκ°λ₯ν©λλ€.
(function () {
var myName = "eun";
})();
myName // "Uncaught ReferenceError: myName is not defined"
- IIFEλ₯Ό λ³μμ ν λΉνλ©΄ IIFE μ체λ μ μ₯λμ§ μκ³ , ν¨μκ° μ€νλ κ²°κ³Όλ§ μ μ₯λ©λλ€.
var result = (function () {
var name = "eun";
return name;
})();
// μ¦μ κ²°κ³Όλ₯Ό μμ±ν©λλ€.
result; // "eun"
λͺ¨λ(Modules)
- λͺ¨λμ΄λ μ ν리μΌμ΄μ μ ꡬμ±νλ κ°λ³μ μΈ μμλ‘μ μ¬μ¬μ© κ°λ₯ν μ½λ μ‘°κ°μ μΌμ»«μ΅λλ€. λͺ¨λμ μΈλΆ μ¬νμ μΊ‘μννκ³ κ³΅κ°κ° νμν APIλ§μ μΈλΆμ λ ΈμΆν©λλ€.
- κ°λ°λλ μ ν리μΌμ΄μ μ ν¬κΈ°κ° μ μ°¨ 컀μ§λ©΄μ νμΌμ μ¬λ¬ κ°λ‘ λΆλ¦¬νκ² λ©λλ€. μ΄λ λΆλ¦¬λ νμΌ κ°κ°μ λͺ¨λμ΄λΌκ³ λΆλ¦ λλ€.
- λ³Έλ ν΄λΌμ΄μΈνΈ μ¬μ΄λμΈ Javascriptλ
script
νκ·Έλ₯Ό ν΅ν΄ μΈλΆ μ€ν¬λ¦½νΈ νμΌμ κ°μ Έμ¬ μλ μμΌλ, κ·Έ νμΌλ§λ€ λ 립μ μΈ νμΌ μ€μ½νλ₯Ό μ§λκ³ μμ§ μκ³ νλμ μ μ κ°μ²΄(Global Object)λ₯Ό 곡μ ν©λλ€. μ¦ μ¬λ¬ κ°μ μΈλΆ νμΌμscript
νκ·Έλ‘ λΆλ¬μ€λλΌλ κ²°κ΅ νλμ Javascript νμΌ λ΄μ μλ κ²μ²λΌ λμνκΈ°μ μ μ λ³μκ° μ€λ³΅λλ λ±μ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
λͺ¨λ ν¨ν΄(Module Pattern)
- AMD: κ°μ₯ μ€λλ λͺ¨λ μμ€ν μ€ νλλ‘ require.jsλΌλ λΌμ΄λΈλ¬λ¦¬λ₯Ό ν΅ν΄ μ²μ κ°λ°λμμ΅λλ€.
- CommonJS: Node.js μλ²λ₯Ό μν΄ λ§λ€μ΄μ§ λͺ¨λ μμ€ν μ λλ€.
- UMD: AMDμ CommonJSμ κ°μ λ€μν λͺ¨λ μμ€ν μ ν¨κ» μ¬μ©νκΈ° μν΄ λ§λ€μ΄μ‘μ΅λλ€.
- ES6 Module: Javascriptμ λλμ΄ νμ€ λͺ¨λ μμ€ν μ΄ λμ λμμ΅λλ€.
λͺ¨λ μ§μμ(Module Directive)
- export μ§μμλ₯Ό λ³μλ ν¨μ μμ λΆμ΄λ©΄ μΈλΆ λͺ¨λμμ ν΄λΉ λ³μλ ν¨μμ μ κ·Όν μ μμ΅λλ€(λͺ¨λ λ΄λ³΄λ΄κΈ°).
- import μ§μμλ₯Ό μ¬μ©νλ©΄ μΈλΆ λͺ¨λμ κΈ°λ₯μ κ°μ Έμ¬ μ μμ΅λλ€(λͺ¨λ κ°μ Έμ€κΈ°).
ES6 Module
export
μ§μμλ₯Ό μ¬μ©ν΄ λͺ¨λsayHi.js
λ΄λΆμ ν¨μsayHi
λ₯Ό μΈλΆλ‘ λ΄λ³΄λΌ μ μμ΅λλ€.
// π sayHi.js
export function sayHi(user) {
alert(`Hello, ${user}!`);
}
import
μ§μμλ₯Ό μ¬μ©ν΄main.js
μμ λͺ¨λsayHi.js
λ₯Ό λΆλ¬μ¬ μ μμ΅λλ€.
// π main.js
import {sayHi} from './sayHi.js';
alert(sayHi); // ν¨μ
sayHi('eun'); // Hello, eun!
λͺ¨λμ ν΅μ¬ κΈ°λ₯
- λͺ¨λμ νμ μ격 λͺ¨λ(use strict)λ‘ μ€νλ©λλ€. λ°λΌμ μ μΈλμ§ μμ λ³μμ κ°μ ν λΉνλ λ±μ μ½λλ μλ¬κ° λ°μλ©λλ€.
- λͺ¨λμ μμ λ§μ μ€μ½νκ° μμ΅λλ€. λ°λΌμ λͺ¨λ λ΄λΆμμ μ μν λ³μλ ν¨μλ λ€λ₯Έ μ€ν¬λ¦½νΈμμ μ κ·Όν μ μμ΅λλ€.
Namespaces
- Namespaceλ κ°μ²΄λ λ³μκ° κ²Ήμ³μ§μ§ μλλ‘ μμ ν μ½λλ₯Ό λ§λ€κΈ° μν κ°λ μ λλ€.
- Javascriptμμλ μμ§ Namespacingμ μ§μνμ§ μμ λ€μ νΉμ±μ μ΄μ©ν©λλ€.
- Javascriptμ λͺ¨λ κ°μ²΄λ μμ±μ κ°μ΅λλ€.
- κ°μ²΄μ λ΄κΈ΄ μμ±μ λ€λ₯Έ κ°μ²΄λ₯Ό λ΄μ μ μμ΅λλ€.
var globVariable = {}; // μ μ κ°μ²΄ νλ μμ±
globVariable.sayMyName = function() {
console.log('eun!'); // ν¨μ μΆκ°
}
globVariable.sayYourName = function() {
console.log('something!');
}
globVariable.sayMyName()
globVariable.sayYourName()
- μ μ κ°μ²΄μ κΈ°λ₯μ μΆκ°νλ ν¨ν΄μ λλ€. νμ¬λ μ§κ΄μ μΈ Moduleμ λ λ§μ΄ μ¬μ©νκΈ°μ μ μ¬μ©νμ§λ μμ΅λλ€.
'π₯ Front-End > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JS] JavaScriptμ appendλ₯Ό μ΄μ©ν HTML μμ μμ±νκΈ° (0) | 2022.05.15 |
---|---|
[JS] 10. setTimeout & setInterval & requestAnimationFrame (0) | 2022.04.20 |
[JS] 7. ννμ & λ¬Έ (0) | 2022.04.17 |
[JS] λͺ¨λμλ°μ€ν¬λ¦½νΈ Deep Dive - μ°μ°μ (0) | 2022.04.07 |
[JS] λͺ¨λμλ°μ€ν¬λ¦½νΈ Deep Dive - λ°μ΄ν° νμ (0) | 2022.04.06 |