Baseline Widely available *
ë³´íµ í¨ìë ìì ì ì¸ë¶(ì¬ê· í¨ìì ê²½ì° ì¤ì¤ë¡) ì½ëê° í¸ì¶í ì ìë "íì íë¡ê·¸ë¨"ì ëë¤. íë¡ê·¸ë¨ê³¼ ë§ì°¬ê°ì§ë¡, í¨ì ìì ëª ë ¹ë¬¸ì ìíì¤ë¡ 구ì±ë í¨ì 본문ì ê°ì§ëë¤. í¨ìì ê°ì ì ë¬íë©´, í¨ìë ê°ì ë°íí ê²ì ëë¤.
JavaScriptìì í¨ìë ë¤ë¥¸ í¨ìë¡ ì ë¬ëê±°ë ë°íë°ì ì ìê³ , ë³ìì ìì±ì í ë¹ë°ì ìë ì기 ë문ì ì¼ê¸ ê°ì²´ì í´ë¹í©ëë¤. ëí ë¤ë¥¸ ê°ì²´ì ë§ì°¬ê°ì§ë¡ ìì±ê³¼ ë©ìë를 ê°ì§ ì ììµëë¤. ë¤ë¥¸ ê°ì²´ì 구ë³ëë ì ì í¨ì를 í¸ì¶í ì ìë¤ë ì ì ëë¤.
JavaScript í¨ì ìë´ììì ë ë§ì ìì ì ì¤ëª ì íì¸íì¸ì.
ì¤ëªí¨ì ê°ì ì¼ë°ì ì¼ë¡ í¨ì
ì ì¸ì¤í´ì¤ì
ëë¤. í¨ì
ê°ì²´ì ìì± ë° ë©ìëì ëí ìì¸í ë´ì©ì Function
ì 참조íì¸ì. í¸ì¶ ê°ë¥í ê°ì¼ë¡ ì¸í´ typeof
ê° "ê°ì²´"
ëì "í¨ì"
를 ë°ííê² ë©ëë¤.
ì°¸ê³ : 모ë í¸ì¶ ê°ë¥í ê°ì´ instanceof Function
ì¸ ê²ì ìëëë¤. ì를 ë¤ì´, Function.prototype
ê°ì²´ë í¸ì¶ ê°ë¥íì§ë§ Function
ì ì¸ì¤í´ì¤ë ìëëë¤. í¨ìì íë¡í íì
ì²´ì¸ì ìëì¼ë¡ ì¤ì íì¬ í¨ìê° ë ì´ì Function.prototype
ìì ììëì§ ìëë¡ í ìë ììµëë¤. ê·¸ë¬ë ì´ë¬í ê²½ì°ë ê·¹í ëë
ëë¤.
í¨ì ì¤íì´ return
문ìì ëëì§ ìê±°ë return
í¤ìë ë¤ì ííìì´ ìë ê²½ì° ë°í ê°ì undefined
ê° ë©ëë¤. return
문ì ì¬ì©íë©´ í¨ììì ììì ê°ì ë°íí ì ììµëë¤. íëì í¨ì í¸ì¶ì íëì ê°ë§ ë°íí ì ìì§ë§, ê°ì²´ ëë ë°°ì´ì ë°ííê³ ê·¸ 결과를 구조 ë¶í´íì¬ ì¬ë¬ ê°ì ë°ííë í¨ê³¼ë¥¼ ëíë¼ ì ììµëë¤.
ì¸ì ì ë¬ì°¸ê³ :
new
ë¡ í¸ì¶ëë ìì±ììë ë°íê°ì ê²°ì íë ë¤ë¥¸ ë¡ì§ì´ ììµëë¤.
매ê°ë³ìì ì ë¬ì¸ìì ì미ë ì½ê° ë¤ë¥´ì§ë§ MDN ì¹ ë¬¸ìììë ì¢ ì¢ ê°ì ìë¯¸ë¡ ì¬ì©í©ëë¤. ê°ë¨í ììì ëë¤.
function formatNumber(num) {
return num.toFixed(2);
}
formatNumber(2);
ì´ ìì ìì num
ë³ìë í¨ìì 매ê°ë³ì(parameter)ë¼ê³ ë¶ë¦¬ë©°, ê´í¸ë¡ ë¬¶ì¸ í¨ì ì ì 목ë¡ì ì ì¸ëì´ ììµëë¤. ë°íì ì í¨ì± ê²ì¬ ì½ë를 ìì±íì§ ìê³ ë JavaScriptìì ìíí ì ìì§ë§ num
매ê°ë³ììë ì«ìê° ë¤ì´ê° ê²ì
ëë¤. formatNumber(2)
í¸ì¶ìì ì«ì 2
ë í¨ìì ì¸ì(argument)ì
ëë¤. ì¦, í¨ì í¸ì¶ìì í¨ìì ì¤ì ë¡ ì ë¬ëë ê°ì
ëë¤. ì¸ì ê°ì í¨ì ë´ìì í´ë¹ 매ê°ë³ì ì´ë¦ ëë arguments
ê°ì²´ë¥¼ íµí´ ì ê·¼í ì ììµëë¤.
ì¸ìë íì ê°ì ìí í¸ì¶ì´ ì´ë£¨ì´ì§ë©° ì ë 참조ì ìí í¸ì¶ì´ ëì§ ììµëë¤. ì¦, í¨ìê° ë§¤ê°ë³ì를 ì¬í ë¹í´ë ê·¸ ê°ì í¨ì ì¸ë¶ìì ë³ê²½ëì§ ììµëë¤. ë ì íí ë§íë©´, ê°ì²´ ì¸ìë ê³µì ì ìí í¸ì¶ì´ë¯ë¡ ê°ì²´ì ìì±ì´ ë³ê²½ëë©´ ë³ê²½ ì¬íì´ í¨ì ì¸ë¶ì ìí¥ì 미칩ëë¤. ìì를 ë¤ì´ë³´ê² ìµëë¤.
function updateBrand(obj) {
// ê°ì²´ ê°ì ë³íë í¨ì ì¸ë¶ìì ë³¼ ì ììµëë¤.
obj.brand = "ìì©";
// ë§¤ê° ë³ì를 ì¬í ë¹í´ë
// í¨ì ì¸ë¶ì ë³ì ê°ìë ìí¥ì 미ì¹ì§ ììµëë¤.
obj = null;
}
const car = {
brand: "íë",
model: "ìì
",
year: 1994,
};
console.log(car.brand); // íë
// ê°ì²´ 참조를 í¨ìì ì ë¬í©ëë¤.
updateBrand(car);
// updateBrandì í¸ì¶ë¡ car ê°ì²´ì ê°ì´ ë³í©ëë¤.
console.log(car.brand); // ìì©
this
í¤ìëë í¨ìê° ì ê·¼íë ê°ì²´ë¥¼ 참조íë©°, íì¬ ì¤í ì¤ì¸ í¨ì를 참조íë ê²ì´ ìëë¯ë¡ í¨ì ë´ììë í¨ì ê°ì ì´ë¦ì¼ë¡ 참조í´ì¼ í©ëë¤.
í¬ê² ë³´ë©´ JavaScriptìë ë¤ ê°ì§ ì¢ ë¥ì í¨ìê° ììµëë¤.
Generator
ê°ì²´ë¥¼ ë°ííë©°, yield
ì°ì°ì를 ì¬ì©íì¬ ì¼ì ì¤ì§ ë° ì¬ê°í ì ììµëë¤.Promise
를 ë°ííë©°, await
ì°ì°ì를 ì¬ì©íì¬ ì¼ì ì¤ì§ ë° ì¬ê°í ì ììµëë¤.AsyncGenerator
ê°ì²´ë¥¼ ë°ííë©°, await
ë° yield
ì°ì°ì를 모ë ì¬ì©í ì ììµëë¤.모ë ì¢ ë¥ì í¨ìì ëí´ ì¸ ê°ì§ ë°©ë²ì¼ë¡ ì ìí ì ììµëë¤.
í¨ì ííì
, function*
, async function ííì
, async function*
Function()
, GeneratorFunction()
, AsyncFunction()
, AsyncGeneratorFunction()
ëí íì´í í¨ìì ë©ìë를 ì ìíë í¹ì êµ¬ë¬¸ì´ ìì´ ë³´ë¤ ì íí ìë¯¸ë¡ ì¬ì©í ì ììµëë¤. Classesë new
ìì´ í¸ì¶íë©´ ìë¬ê° ë°ìí기 ë문ì ê°ë
ì ì¼ë¡ë í¨ìê° ìëì§ë§ Function.prototype
ìì ììëë©° typeof MyClass === "function"
ì ê°ìµëë¤.
// ìì±ì
const multiply = new Function("x", "y", "return x * y");
// ì ì¸
function multiply(x, y) {
return x * y;
} // No need for semicolon here
// ííì; ë³ìì í ë¹ëë ìµëª
í¨ìì
ëë¤.
const multiply = function (x, y) {
return x * y;
};
// ííì; ê³ ì í ì´ë¦ì ê°ì§ëë¤.
const multiply = function funcName(x, y) {
return x * y;
};
// íì´í í¨ì
const multiply = (x, y) => x * y;
// ë©ìë
const obj = {
multiply(x, y) {
return x * y;
},
};
모ë 구문ì ê±°ì ëì¼í ìì ì ìííì§ë§ ëª ê°ì§ 미ë¬í ëì ì°¨ì´ê° ììµëë¤.
Function()
ìì±ì, function
ííì, function
ì ì¸ êµ¬ë¬¸ì 본격ì ì¸ í¨ì ê°ì²´ë¥¼ ìì±íë©°, ì´ ê°ì²´ë new
ë¡ êµ¬ì±í ì ììµëë¤. ê·¸ë¬ë íì´í í¨ìì ë©ìëë 구ì±í ì ììµëë¤. ë¹ë기 í¨ì, Generator í¨ì ë° ë¹ë기 Generator í¨ìë 구문ì ê´ê³ìì´ êµ¬ì±í ì ììµëë¤.function
ì ì¸ì í¨ì í¸ì´ì¤í
ê³¼ ê°ì í¨ì를 ìì±í©ëë¤. ë¤ë¥¸ 구문ì í¨ì를 ëì°ì§ ìì¼ë©° í¨ì ê°ì ì ì ë¤ìë§ íìë©ëë¤.Function()
ìì±ìë íì ìµëª
í¨ì를 ìì±íë¯ë¡ ì¬ê·ì ì¼ë¡ ìì ì ì½ê² í¸ì¶í ì ììµëë¤. íì´í í¨ì를 ì¬ê·ì ì¼ë¡ í¸ì¶íë í ê°ì§ ë°©ë²ì ë³ìì í ë¹íë ê²ì
ëë¤.arguments
ëë this
ì ëí ì ê·¼ ê¶íì´ ììµëë¤.Function()
ìì±ìë ì§ì ë³ìì ì ê·¼í ì ìì¼ë©° ì ì ë²ììë§ ì ê·¼í ì ììµëë¤.Function()
ìì±ìë ë°íì ì»´íì¼ì ì ë°íë©° ë¤ë¥¸ êµ¬ë¬¸ë³´ë¤ ìëê° ë린 ê²½ì°ê° ë§ìµëë¤.function
ííìì ê²½ì° í¨ì ì´ë¦ê³¼ í¨ìê° í ë¹ëë ë³ì ì¬ì´ì 구ë¶ì´ ììµëë¤. í¨ì ì´ë¦ì ë³ê²½í ì ìì§ë§ í¨ìê° í ë¹ë ë³ìë ì¬í ë¹í ì ììµëë¤. í¨ì ì´ë¦ì í¨ìê° í ë¹ë ë³ìì ë¤ë¥¼ ì ìì¼ë©°, ìë¡ ê´ë ¨ì´ ììµëë¤. í¨ìì ì´ë¦ì í¨ì ë´ììë§ ì¬ì©í ì ììµëë¤. í¨ì ì¸ë¶ìì ì¬ì©íë ¤ê³ íë©´ ì¤ë¥ê° ë°ìí©ëë¤(ëë ëì¼í ì´ë¦ì´ ë¤ë¥¸ ê³³ìì ì ì¸ë ê²½ì° ë¤ë¥¸ ê°ì ê°ì ¸ìµëë¤). ìì를 ë´
ìë¤.
const y = function x() {};
console.log(x); // 참조 ìë¬: xê° ì ìëì§ ìììµëë¤.
ë°ë©´ì í¨ìê° í ë¹ëë ë³ìë í¨ìê° ì ì¸ë ë²ì를 í¬í¨íëë¡ ë³´ì¥ëë ë²ìì ìí´ìë§ ì íë©ëë¤.
í¨ì ì ì¸ì ëí í¨ì ì´ë¦ê³¼ ê°ì ì´ë¦ì ë³ì를 ìì±í©ëë¤. ë°ë¼ì í¨ì ííìì¼ë¡ ì ìë í¨ìì ë¬ë¦¬ í¨ì ì ì¸ì¼ë¡ ì ìë í¨ìë ìì²´ì ë²ìë¿ë§ ìëë¼ ì ìë ë²ììì ê·¸ ì´ë¦ì¼ë¡ ì ê·¼í ì ììµëë¤.
new Function
ì¼ë¡ ì ìë í¨ìë ìì¤ê° ëì ì¼ë¡ ì¡°ì§ëë©°, ì§ë ¬íí ë ê´ì°°í ì ììµëë¤. console.log(new Function().toString())
ì ë¤ìê³¼ ê°ìµëë¤.
function anonymous(
) {
}
ì´ê²ì í¨ì를 ì»´íì¼íë ë° ì¬ì©ëë ì¤ì ìì¤ì
ëë¤. Function()
ìì±ìë anonymous
ë¼ë ì´ë¦ì í¨ì를 ìì±íì§ë§, ì´ ì´ë¦ì 본문ì ë²ìì ì¶ê°ëì§ ììµëë¤. 본문ì ì ì ë³ììë§ ì ê·¼í ì ììµëë¤. ì를 ë¤ì´ ë¤ìê³¼ ê°ì ê²½ì° ì¤ë¥ê° ë°ìí©ëë¤.
new Function("alert(anonymous);")();
í¨ì ííìì´ë í¨ì ì ì¸ì ìí´ ì ìë í¨ìë íì¬ ë²ì를 ììí©ëë¤. ì¦, í¨ìë í´ë¡ì 를 íì±í©ëë¤. ë°ë©´ì Function
ìì±ìì ìí´ ì ìë í¨ìë 모ë í¨ìê° ììíë ì ì ë²ì ì¸ìë ì´ë¤ ë²ìë ììíì§ ììµëë¤.
// pë ì ì ë³ìì
ëë¤.
globalThis.p = 5;
function myFunc() {
// pë ì§ì ë³ìì
ëë¤.
const p = 9;
function decl() {
console.log(p);
}
const expr = function () {
console.log(p);
};
const cons = new Function("\tconsole.log(p);");
decl();
expr();
cons();
}
myFunc();
// Logs:
// 9 ('decl' í¨ì ì ì¸ (íì¬ ë²ì))
// 9 ('expr' í¨ì ííì (íì¬ ë²ì))
// 5 ('cons' í¨ì ìì±ì (ì ì ë²ì))
í¨ì ííìê³¼ í¨ì ì ì¸ì¼ë¡ ì ìë í¨ìë í ë²ë§ 구문 ë¶ìëì§ë§, Function
ìì±ìë¡ ì ìë í¨ìë ìì±ìê° í¸ì¶ë ëë§ë¤ ì ë¬ë 문ìì´ì ë§¤ë² êµ¬ë¬¸ ë¶ìí©ëë¤. í¨ì ííìì ë§¤ë² í´ë¡ì 를 íì±íì§ë§ í¨ì ë´ë¶ë ë¤ì 구문ì ë¶ìíì§ ìì¼ë¯ë¡ í¨ì ííìì´ new Function(...)
ë³´ë¤ ì¬ì í ë¹ ë¦
ëë¤. ë°ë¼ì ì¼ë°ì ì¼ë¡ Function
ìì±ìë ê°ë¥í í í¼í´ì¼ í©ëë¤.
í¨ì ì ì¸ì ííì 구문ì ìì±í ë ìëì¹ ìê² í¨ì ííìì¼ë¡ ë°ë ì ììµëë¤.
// í¨ì ì ì¸ì
ëë¤.
function foo() {
console.log("FOO!");
}
doSomething(
// ì¸ìë¡ ì ë¬ë í¨ì ííìì
ëë¤.
function foo() {
console.log("FOO!");
},
);
ë°ë©´ì í¨ì ííìì í¨ì ì ì¸ì¼ë¡ ë°ë ìë ììµëë¤. expression statementì function
ëë async function
í¤ìëë¡ ììí ì ìì¼ë©°, ì´ë IIFEs(ì¦ì í¸ì¶ë í¨ì ííì)를 구íí ë íí ë²íë ì¤ìì
ëë¤.
function () { // SyntaxError: Function statements require a function name
console.log("FOO!");
}();
function foo() {
console.log("FOO!");
}(); // SyntaxError: Unexpected token ')'
ëì ííì 구문ì ë¤ë¥¸ ê²ì¼ë¡ ììíì¬ function
í¤ìëê° í¨ì ííìì ëª
ííê² ììíëë¡ í©ëë¤. ì¼ë°ì ì¸ ìµì
ì¼ë¡ë 그룹 ì°ì°ìì void
ì¬ì©ì´ ììµëë¤.
(function () {
console.log("FOO!");
})();
void function () {
console.log("FOO!");
}();
í¨ì 매ê°ë³ì
í¨ìì 매ê°ë³ìë í¨ì ë´ìì ì ê·¼í ì ìë ê°ë¨í ìë³ìì ëë¤.
function myFunc(a, b, c) {
// You can access the values of a, b, and c here
}
ì¸ ê°ì§ì í¹ë³í 매ê°ë³ì êµ¬ë¬¸ì´ ììµëë¤.
ì ìëì§ ìì
ê²½ì° ê³µì 매ê°ë³ì를 기본ê°ì¼ë¡ ì´ê¸°íí ì ììµëë¤.function myFunc({ a, b }, c = 1, ...rest) {
// ì¬ê¸°ì a, b, cì ëë¨¸ì§ ê°ì ì ê·¼í ì ììµëë¤.
}
ìì 매ê°ë³ì 구문 ì¤ íë를 ì¬ì©í ê²½ì° ëª ê°ì§ ê²°ê³¼ê° ë°ìí©ëë¤.
"use strict"
를 ì ì©í ì ììµëë¤. ì´ë¡ ì¸í´ syntax errorê° ë°ìí©ëë¤.arguments
ê°ì²´ë ëª
ëª
ë 매ê°ë³ìì ë기í를 ì¤ì§íê³ arguments.callee
ì ê·¼ ì ì¤ë¥ë¥¼ ë°ììíµëë¤.arguments
ê°ì²´ë¥¼ ì¬ì©íì¬ í¨ì ë´ìì í¨ìì ì¸ì를 참조í ì ììµëë¤.
arguments
íì¬ ì¤í ì¤ì¸ í¨ìì ì ë¬ë ì¸ìê° í¬í¨ë ë°°ì´í ê°ì²´ì ëë¤.
arguments.callee
íì¬ ì¤í ì¤ì¸ í¨ìì ëë¤.
arguments.length
í¨ìì ì ë¬í ì¸ìì ìì ëë¤.
ìë¡ì´ ìì± ì¶ê°ë¥¼ ì§ìíë íì¤ ë´ì¥ ê°ì²´ ëë ì¬ì©ì ì ì ê°ì²´ìì ì ê·¼ìì ìì±ì ì ìí ì ììµëë¤. ê°ì²´ ì´ê¸°ì ë° classes ë´ìì í¹ì 구문ì ì¬ì©íì¬ ì ê·¼ì ìì±ì getterì setter를 ì ìí ì ììµëë¤.
ê°ì²´ì ìì±ì ì ê·¼íë©´ í¸ì¶í í¨ì를 ë°ì¸ë©í©ëë¤.
ê°ì²´ì ìì±ì í ë¹ì ìëíë©´ í¸ì¶í í¨ì를 ë°ì¸ë©í©ëë¤.
ì´ êµ¬ë¬¸ì ë©ìëê° ìë ê°ì²´ ìì±ì ìì±íë¤ë ì ì ì ìíì¸ì. Getter ë° setter í¨ì ìì²´ë Object.getOwnPropertyDescriptor()
ì ê°ì 리íë í°ë¸ API를 íµí´ìë§ ì ê·¼í ì ììµëë¤.
ì격 모ëììë ë¸ë¡ ë´ì í¨ì ë²ìê° í´ë¹ ë¸ë¡ì¼ë¡ ì íë©ëë¤. ES2015 ì´ì ìë ì격 모ëìì ë¸ë¡ ìì¤ í¨ìê° ê¸ì§ëììµëë¤.
"use strict";
function f() {
return 1;
}
{
function f() {
return 2;
}
}
f() === 1; // true
// ì격 모ëê° ìë ê²½ì° f() === 2
ë¹ì격 모ëì ë¸ë¡ ë 벨 í¨ì
í ë§ëë¡, íì§ ë§ì¸ì.
ë¹ì격 모ëììì ë¸ë¡ ë´ í¨ì ì ì¸ì ì´ìíê² ëìí©ëë¤. ìì를 ë´ ìë¤.
if (shouldDefineZero) {
function zero() {
// ìí: í¸íì± ìí
console.log("zeroì
ëë¤.");
}
}
ì격 모ëìì ì´ ì미ë ì ì§ì ëì´ ììµëë¤. 0
ì if
ë¸ë¡ì í´ë¹ ë²ì ë´ììë§ ì¡´ì¬í©ëë¤. shouldDefineZero
ê° ê±°ì§ì´ë©´ ë¸ë¡ì´ ì¤íëì§ ìì¼ë¯ë¡ zero
를 ì ìí´ìë ì ë©ëë¤. ì´ì ìë ì´ ê°ì´ ì§ì ëì§ ìì기 ë문ì ë¸ë¼ì°ì ë§ë¤ ë¹ì격 모ëìì ë¤ë¥´ê² 구ííìµëë¤. ìì¸í ë´ì©ì í¨ì
ì ì¸ì 참조íì¸ì.
ì¡°ê±´ë¶ë¡ í¨ì를 ì ìíë ë ìì í ë°©ë²ì ë³ìì í¨ì ííìì í ë¹íë ê²ì ëë¤.
// var를 ì¬ì©íë©´ ì ì ë³ìë¡ ì¬ì©í ì ììµëë¤.
// ìµìì í¨ì ì ì¸ì ë ê°ê¹ì´ ëìì ì ê³µí©ëë¤.
var zero;
if (shouldDefineZero) {
zero = function () {
console.log("zeroì
ëë¤.");
};
}
ìì íìì´ ì§ì ë ì«ì ë°í
ì«ìì ì í 0ì ì¶ê°í´ íìíë ííì¼ë¡ 문ìì´ì ë°ííë í¨ìì ëë¤.
// ì´ í¨ìë ì í 0ì¼ë¡ í¨ë©ë 문ìì´ì ë°íí©ëë¤.
function padZeros(num, totalLen) {
let numStr = num.toString(); // ë°í ê°ì 문ìì´ë¡ ì´ê¸°í
const numZeros = totalLen - numStr.length; // íìí 0ì ì ê³ì°
for (let i = 1; i <= numZeros; i++) {
numStr = `0${numStr}`;
}
return numStr;
}
ë¤ì ëª
ë ¹ë¬¸ìì padZeros
í¨ì를 í¸ì¶í©ëë¤.
let result;
result = padZeros(42, 4); // "0042" ë°í
result = padZeros(42, 2); // "42" ë°í
result = padZeros(5, 4); // "0005" ë°í
í¨ì ì¡´ì¬ ì¬ë¶ íë¨
typeof
ì°ì°ì를 ì¬ì©íì¬ í¨ìê° ìëì§ íì¸í ì ììµëë¤. ë¤ì ìì ììë window
ê°ì²´ì í¨ìì¸ noFunc
ë¼ë ìì±ì´ ìëì§ íì¸í기 ìí í
ì¤í¸ê° ìíë©ëë¤. ìì±ì´ ìë¤ë©´ ì¬ì©ëë©°, ê·¸ë ì§ ìì¼ë©´ ë¤ë¥¸ ì¡°ì¹ê° ì·¨í´ì§ëë¤.
if (typeof window.noFunc === "function") {
// noFunc() ì¬ì©
} else {
// ë¤ë¥¸ ëì ìí
}
if
í
ì¤í¸ììë noFunc
ì ëí ì°¸ì¡°ê° ì¬ì©ëë©°, í¨ì ì´ë¦ ë¤ì ëê´í¸ ()
ê° ìì¼ë¯ë¡ ì¤ì í¨ìê° í¸ì¶ëì§ ììµëë¤.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4