Skip to content

javascript_in_depth_2

kyusung edited this page Apr 19, 2017 · 1 revision

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธํ˜•๊ณผ typeof

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€์ˆ˜๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ํ˜•ํƒœ๋ฅผ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ˜•(type)์— ๋Œ€ํ•œ ์ œ์•ฝ์ด ์—†๋‹ค.
ํŠน์ • ๋ณ€์ˆ˜๊ฐ€ ์–ด๋–ค ํ˜•ํƒœ์ธ์ง€ ํ™•์ธํ•˜๋Š” ์—ฐ์‚ฐ์ž๋กœ๋Š” typeof๊ฐ€ ์žˆ๋‹ค.

typeof null; // === "object"

null ๊ฐ’์ด object๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ด์œ ๋Š” null์€ ๊ธฐ๋ณธํ˜•์ด์ง€๋งŒ ๊ฐœ๋ฐœ ๋‹น์‹œ ๋‹ค๋ฅธ ์–ธ์–ด๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ null์ด๋ฉด 0๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ "object"๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๊ฐœ๋ฐœํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ECMAScript 2016 12.5.5 The typeof Operator

new String("")๊ณผ "", ๊ทธ๋ฆฌ๊ณ  String("")์˜ ์ฐจ์ด

๊ฐ์ฒด์— ๋Œ€ํ•˜์—ฌ ์–ด๋– ํ•œ ๊ฐ์ฒด์ธ์ง€ ํ™•์ธํ•˜๋Š” instanceof ์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ๋‹ค. instanceof ์—ฐ์‚ฐ์ž๋Š” ๊ธฐ๋ณธํ˜•์— ๋Œ€ํ•ด์„œ๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.

var color1 = new String("red");
var color2 = "red";

color1 == color2; // true 
color1 instanceof String; // true
color2 instanceof String; // false
color2 instanceof Object; // false

color1 === color2; // false
color1.constructor === String; // true
color2.constructor === String; // true

== ์—ฐ์‚ฐ์ž๋กœ ๋น„๊ต์‹œ์—๋Š” ํ˜•๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜์„œ ๊ฐ™์€ ๊ฐ’์œผ๋กœ ํŒ๋‹จํ•˜์ง€๋งŒ === ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—„๊ฒฉํ•œ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•ด์„œ ๋‹ค๋ฅธ๊ฐ’์œผ๋กœ ํŒ๋‹จํ•œ๋‹ค. color1์€ String์˜ ์ธ์Šคํ„ด์Šค์ด๊ณ  color2๋Š” ๊ธฐ๋ณธํ˜•์ด๋ฏ€๋กœ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

๋‘ ๋ณ€์ˆ˜์˜ constructor ์†์„ฑ์„ ์‚ดํŽด๋ณด๋ฉด ๋‘˜๋‹ค String์ด๋ผ๊ณ  ๋‚˜์˜ค๋Š”๋ฐ, color2์˜ ์ƒ์„ฑ์ž๊ฐ€ String์ธ ์ด์œ ๋Š” color2.constructor๋ฅผ ์—ฐ์‚ฐํ•  ๋•Œ ๋‚ด๋ถ€์ ์œผ๋กœ ํ˜•๋ณ€ํ™˜์ด ์ผ์–ด๋‚œ ๋‹ค์Œ์— constructor์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์†์„ฑ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ ๋‚ด๋ถ€์ ์œผ๋กœ GetValue๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ฐธ์กฐํ•˜๋Š”๋ฐ, GetValue์—์„œ ๊ธฐ๋ณธํ˜•์ธ base์— ๋Œ€ํ•ด์„œ ์†์„ฑ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ToObject๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ธฐ๋ณธํ˜•์„ ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝํ•ด์„œ ๊ฐ€์ ธ์˜จ๋‹ค. ๊ธฐ๋ณธํ˜• ๋ฌธ์ž์—ด์„ ToObjectํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ๋„˜๊ฒจ์ฃผ๋ฉด String์€ String ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ๋’ค ์ž…๋ ฅ๊ฐ’์„ ์„ค์ •ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
๋”ฐ๋ผ์„œ, ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๋ฐ˜ํ™˜๋˜๋ฏ€๋กœ color2์˜ ์†์„ฑ์— ์ ‘๊ทผํ•˜๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” String ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

ECMAScript 2016 6.2.3.1 GetValue
ECMAScript 2016 7.1.13 ToObject ( argument )

๋ฌธ์ž์—ด ์ƒ์„ฑ ๋ฐฉ๋ฒ•์—๋„ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

var color1 = new String("red");
var color2 = "red";
var color3 = String("red");

console.log(color1 instanceof String); // true
console.log(color2 instanceof String); // false
console.log(color3 instanceof String); // false

console.log(typeof color1) // object
console.log(typeof color2) // string
console.log(typeof color3) // string

String ํ•จ์ˆ˜ํ˜ธ์ถœ์€ ๋‚ด๋ถ€์ ์œผ๋กœ ToString() ํ˜ธ์ถœํ•ด์„œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ ToString()์€ ์ž…๋ ฅ ์ธ์ž๊ฐ€ ๊ธฐ๋ณธํ˜•์ธ String์ผ ๊ฒฝ์šฐ ์ธ์ž๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ String("red")๋Š” ๋ฌธ์ž์—ด ๊ธฐ๋ณธํ˜•์ธ "red"์™€ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ECMAScript 2016 21.1.1.1 String
ECMAScript 2016 7.1.12 ToString ( argument )

๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜

๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜๋ฅผ ์ž์ œํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

  1. **์†Œ์Šค์™€ ๋ฐ์ดํ„ฐ์˜ ๊ณต๊ฐœ์„ฑ๊ณผ ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ ์™ธ๋ถ€ ์†Œ์Šค ํ™œ์šฉ **
  • ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ํฐ ํ”„๋กœ์ ํŠธ๋กœ ์†Œ์Šค๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ๊ด€๋ฆฌํ•  ๋•Œ ์ถฉ๋™์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ชจ๋“ˆํ™”๋ฅผ ํ•˜๊ฑฐ๋‚˜ ํด๋กœ์ €๋ฅผ ํ†ตํ•ด ์˜ˆ๋ฐฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  1. ๋น„๋™๊ธฐ ๋กœ์ง๊ณผ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ
  • ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ์ด๋ฒคํŠธ ๋˜๋Š” ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ๋“ฑ์˜ ๋น„๋™๊ธฐ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค.
  1. PC์™€ ๊ฐ™์ด ์ข‹์€ ์„ฑ๋Šฅ์—์„œ๋ถ€ํ„ฐ ๋ชจ๋ฐ”์ผ์˜ ์•ˆ ์ข‹์€ ์„ฑ๋Šฅ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๋ธŒ๋ผ์šฐ์ง• ํ™˜๊ฒฝ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์„œ ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ, ๋™์ ์ธ ๋ณ€์ˆ˜ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜์œ„ ์Šค์ฝ”ํ”„๊ฐ€ ์‚ด์•„์žˆ๋‹ค๋ฉด, ์ƒ์œ„์˜ ๋ณ€์ˆ˜๋“ค๋„ ๊ณ„์† ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋กœ ๋‚จ์•„์žˆ๊ฒŒ ๋œ๋‹ค.
  • ์ž ์‹œ ์‚ฌ์šฉํ•  ๋ณ€์ˆ˜๋Š” ๋กœ์ปฌ ๋ณ€์ˆ˜๋กœ ํ˜„์žฌ์˜ ์Šค์ฝ”ํ”„์— ์˜ฌ๋ฆฌ๊ณ , AJAX์˜ ์š”์ฒญ์œผ๋กœ ์˜ค๊ฒŒ ๋  ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋‚˜ ๋ฌธ์ž์—ด๋กœ ๋กœ์ปฌ๋กœ ๋ณด๊ด€ํ•˜๊ณ  ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด ๋ฐ”๋กœ๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

window ๊ฐ์ฒด

๋‹ค์Œ์€ ํ‘œ์ค€์—์„œ "Global Object"์— ๋Œ€ํ•˜์—ฌ ์ •์˜๋œ ๋ถ€๋ถ„์ด๋‹ค.

  • ๊ธ€๋กœ๋ฒŒ ๊ฐ์ฒด๋Š” ๋‹จ ํ•˜๋‚˜๋งŒ ์œ ์ผํ•˜๊ฒŒ ์กด์žฌํ•˜๋ฉฐ, ์–ด๋– ํ•œ ์ปจํ…์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ๋จผ์ € ์ƒ์„ฑ๋œ๋‹ค.
  • ๊ธ€๋กœ๋ฒŒ ๊ฐ์ฒด๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ƒ์„ฑ์ž๊ฐ€ ์—†์œผ๋ฉฐ, new๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์„ฑ์ž๋กœ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ๊ธ€๋กœ๋ฒŒ ๊ฐ์ฒด๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ [[Call]] ํ•จ์ˆ˜๊ฐ€ ์—†์œผ๋ฉฐ, ๊ธ€๋กœ๋ฒŒ ๊ฐ์ฒด๋ฅผ ํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.
  • ๊ธ€๋กœ๋ฒŒ ๊ฐ์ฒด์˜ [[Prototype]]์€ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ธ€๋กœ๋ฒŒ ๊ฐ์ฒด๋Š” ์ถ”๊ฐ€๋กœ ํ‘œ์ค€์— ๋ช…์‹œ๋˜์–ด ์žˆ๋Š” ์ด ์†์„ฑ๋“ค ์ด์™ธ์—๋„ ์ถ”๊ฐ€ ์†์„ฑ๋“ค์ด ์ •์˜๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธ€๋กœ๋ฒŒ ๊ฐ์ฒด ์ž์‹ ์„ ๋‹ค์‹œ ์†์„ฑ์œผ๋กœ ๊ฐ€์ง€๋Š” ๊ฒƒ๋„ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, HTML DOM์—์„œ window ์†์„ฑ์€ ๊ธ€๋กœ๋ฒŒ ๊ฐ์ฒด ์ž์‹ ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์†์„ฑ์ด๋‹ค.

ECMAScript 2016 18 The Global Object

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ window ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • window ๊ฐ์ฒด๋ฅผ ํ†ตํ•œ ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜ ์ ‘๊ทผ
var myGlobal = "am i in window?";
console.log(window.myGlobal);
console.log(window["myGlobal"]);
  • window ๊ฐ์ฒด๋ฅผ ํ†ตํ•œ ๊ธ€๋กœ๋ฒŒ ํ•จ์ˆ˜ ํ˜ธ์ถœ
function myGlobalFunction() {
  alert("Global function invoked");
}

window["myGlobalFunction"]();
window["myGlobalFunction"].call();
  • window ๊ฐ์ฒด๋ฅผ ํ†ตํ•œ ๊ธ€๋กœ๋ฒŒ ํ•จ์ˆ˜ ์ •์˜
(function () {
  window.myGlobalFunction = function() {
    alert("Global function");
  };
}());

myGlobalFunction();
myGlobalFunction.call();

๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐฉ๋ฒ•์˜ ์ฐจ์ด

var ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉด ํ˜„์žฌ ๋ณ€์ˆ˜ํ™˜๊ฒฝ์— ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  undefined๋กœ ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
var ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๊ตฌ๋ฌธ์ด ์ง์ ‘ ์‹คํ–‰๋˜๋Š” ์ˆœ๊ฐ„์— ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜๋ฅผ window ๊ฐ์ฒด์˜ ์†์„ฑ์œผ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • var ํ‚ค์›Œ๋“œ๋กœ ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜ ์ •์˜
console.log("1: " + varExists + ", " + window.hasOwnProperty("varExists")); // undefined, true
var varExists = "Define a global variable with var keyword"; 
console.log("2: " + varExists);

์œ„ ๊ฒฐ๊ณผ๋Š” 1์—์„œ varExists ๊ฐ’์€ undefined๊ฐ€ ๋‚˜์˜ค๊ณ , 2์—์„œ ์„ค์ •ํ•œ ๊ฐ’์ด ๋‚˜ํƒ€๋‚œ๋‹ค.
๋”ฐ๋ผ์„œ, window๋Š” ์ด๋ฏธ var ํ‚ค์›Œ๋“œ๋กœ ์ •์˜ํ•œ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • var ํ‚ค์›Œ๋“œ ์—†์ด ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜ ์ •์˜
console.log("Exists?: " + window.hasOwnProperty("noVar"));
console.log("1: " + noVar);
noVar = "Define a global variable without var keyword";
console.log("2: " + noVar);

์œ„ ๊ฒฐ๊ณผ์—์„œ noVar = "..." ๊ตฌ๋ฌธ์ด ์‹คํ–‰๋˜๊ธฐ ์ „์—๋Š” ๋ณ€์ˆ˜๊ฐ€ window์˜ ์†์„ฑ์œผ๋กœ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค. ๋”ฐ๋ผ์„œ noVar ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ •์˜๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ผ๋Š” ๋ ˆํผ๋Ÿฐ์Šค ์—๋Ÿฌ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.

ECMAScript 2016 13.3.2 Variable Statement

๋ณ€์ˆ˜ ํ™˜๊ฒฝ์ด ์ƒ์„ฑ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ํ•จ์ˆ˜์˜ ์‹คํ–‰ํ™˜๊ฒฝ์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋‹จ๊ณ„์ค‘ 26.b์™€ 27.e์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ์žˆ๋‹ค.
์„ ์–ธ๋œ ๋ชจ๋“  ๋ณ€์ˆ˜๋ช…์„ instantiatedVarNames ๋ชฉ๋ก์œผ๋กœ ๊ฒ€์‚ฌํ•˜์—ฌ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด, ํ˜„์žฌ ํ™˜๊ฒฝ์— var ํ‚ค์›Œ๋“œ ๋“ฑ์œผ๋กœ ์ •์˜๋œ ๋ณ€์ˆ˜๋“ค์˜ ๊ฐ’์„ undefined๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€, ํ•จ์ˆ˜์˜ ์†Œ์Šค์ฝ”๋“œ์ธ code ์ „์ฒด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— var ํ‚ค์›Œ๋“œ๋กœ ์ •์˜ํ•˜๋Š” ๋ณ€์ˆ˜๋Š” ์œ„์น˜๋Š” ์˜๋ฏธ๊ฐ€ ์—†๊ณ , ๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐํ™” ์œ„์น˜๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์†Œ์Šค์ฝ”๋“œ ์ค‘๊ฐ„์ด๋‚˜ if ๋“ฑ์œผ๋กœ ๋ถ„๊ธฐํ•  ๋•Œ var ํ‚ค์›Œ๋“œ๋กœ ๋ณ€์ˆ˜๋ฅผ ๋”ฐ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ์„ฑ๋Šฅ์— ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.

ECMAScript 2016 9.2.12 FunctionDeclarationInstantiation

var ํ‚ค์›Œ๋“œ์˜ ํšจ์œจ์ ์ธ ์‚ฌ์šฉ

JSLint์—์„œ๋Š” ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ var ํ‚ค์›Œ๋“œ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ํ•จ์ˆ˜์˜ ๊ฐ€์žฅ ์œ„์ฒด์— ์ •์˜ํ•˜๋ผ๊ณ  ๊ถŒํ•œ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์‹œ์ž‘๋˜๋Š” ๋ถ€๋ถ„์— varํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉด ๋ช‡ ๊ฐ€์ง€ ์žฅ์ ์ด ์žˆ๋‹ค.

  1. ์ดˆ๊ธฐํ™”์˜ ์‹ค์ˆ˜ ์ตœ์†Œํ™”
  • ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฒ€์ฆ์‹œ์— ์„ ์–ธ์„ ํ•˜์ง€ ์•Š์€ ๊ฐ’๊ณผ ๊ฐ™์€ "undefined"๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ดˆ๊ธฐํ™”์— ๋Œ€ํ•œ ํœด๋จผ ์—๋Ÿฌ๋ฅผ ์ค„์ด๊ณ  ๊ด€๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜ ์ƒ๋‹จ์— ํ•˜๋‚˜์˜ var์— ๋ชจ์•„์„œ null๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  1. ํ•ด๋‹น ์Šค์ฝ”ํ”„์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๊ด€๋ฆฌ ์šฉ์ด
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” var๋ฅผ ๋ถ™์—ฌ์„œ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ƒ์œ„ ์Šค์ฝ”ํ”„๋‚˜ ์ตœ์•…์˜ ๊ฒฝ์šฐ ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜๋กœ ํ™œ์šฉ๋˜์–ด ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜ ์ƒ๋‹จ์— ์„ ์–ธํ•  ๊ฒฝ์šฐ ์Šค์ฝ”ํ”„์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ด์ง„๋‹ค.
  1. ๋ฏธ๋‹ˆํ”ผ์ผ€์ด์…˜ ์ตœ์ ํ™”
  • ๋ฏธ๋‹ˆํ”ผ์ผ€์ด์…˜์ด๋ž€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด๋‹ค.
  • var๋Š” ํ‚ค์›Œ๋“œ๋ผ์„œ ๋ฏธ๋‹ˆํ”ผ์ผ€์ด์…˜์„ ํ†ตํ•ด ๋”์ด์ƒ ์ž‘์€ ํฌ๊ธฐ๋กœ ์ค„์ผ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ var ํ•˜๋‚˜์— ๋ณ€์ˆ˜๋ฅผ ๋ฌถ์–ด์„œ ์„ ์–ธํ•˜๋ฉด ๋ฏธ๋‹ˆํ”ผ์ผ€์ด์…˜์—์„œ๋„ ์œ ๋ฆฌํ•˜๋‹ค.

๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜ ์ตœ์†Œํ™”ํ•˜๊ธฐ

๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ค‘ ๋Œ€ํ‘œ์ ์ธ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  • ํด๋กœ์ €๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋ชจ๋“ˆ/๋„ค์ž„์ŠคํŽ˜์ด์Šค ํŒจํ„ด์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

์œ„ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธฐ์ค€์„ ๋”ฐ๋ฅด๋ฉด ๋œ๋‹ค.

  • DOM์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋„ฃ๊ณ  ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค -> ๋ชจ๋“ˆ ๋ฐฉ์‹
  • ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์†Œ์Šค๋ฅผ ๋งŒ๋“ ๋‹ค -> ๋ชจ๋“ˆ ๋ฐฉ์‹
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค -> ๋ชจ๋“ˆ ๋ฐฉ์‹
  • ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ผ์ด ์—†๋‹ค -> ํด๋กœ์ € ๋ฐฉ์‹
  • ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค -> ํด๋กœ์ € ๋ฐฉ์‹

๋ณ€์ˆ˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๊ณผ ์„ฑ๋Šฅ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์ƒ์œ„ ์Šค์ฝ”ํ”„์— ์žˆ์„ ๋•Œ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณ€์ˆ˜ ์ •์˜ ํ™˜๊ฒฝ ํƒ์ƒ‰์„ ์žฌ๊ท€๋กœ ์‹œํ–‰ํ•œ๋‹ค.
GetIdentifierReference() ํ•จ์ˆ˜๋Š” ๋ณ€์ˆ˜ ์ •์˜ํ™˜๊ฒฝ์—์„œ ๋ณ€์ˆ˜๋ช…์„ ์ฐพ์•„๊ฐˆ ๋•Œ ๋‚ด๋ถ€์ ์ธ ๋™์ž‘์„ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ envRec์˜ ํ™˜๊ฒฝ ๋ ˆ์ฝ”๋“œ์— ๋ณ€์ˆ˜๊ฐ€ ์ •์˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ, ์—†๋‹ค๋ฉด ์ƒ์œ„ ํ™˜๊ฒฝ์œผ๋กœ ๊ฐ€์„œ ๋‹ค์‹œ ์žฌ๊ท€์ ์œผ๋กœ GetIdentifierReference() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒ์œ„ ์Šค์ฝ”ํ”„์— ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์€ ์ปดํ“จํŒ… ์ž์›์„ ์กฐ๊ธˆ ์†Œ๋ชจํ•œ๋‹ค.

์ƒ์œ„ ์Šค์ฝ”ํ”„ ์ฒด์ธ์˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์˜ˆ

์Šค์ฝ”ํ”„ ์ฒด์ธ์— ๋”ฐ๋ฅธ ๋ณ€์ˆ˜ ํƒ์ƒ‰

ECMAScript 2016 8.1.2.1 GetIdentifierReference (lex, name, strict)

ํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ตฌ์„ฑ์„ ์ตœ์ ํ™”ํ•˜๋ ค๋ฉด ์ƒ์œ„ ์Šค์ฝ”ํ”„์— ์ •์˜๋œ ๋ณ€์ˆ˜๋ฅผ ํ•˜์œ„ ์Šค์ฝ”ํ”„์˜ ๋กœ์ปฌ ๋ณ€์ˆ˜๋กœ ๋Œ์–ด๋‚ด๋ฆฌ๋Š”๊ฒƒ์ด ์ข‹๋‹ค. ์ด๋Ÿฌํ•œ ์Šค์ฝ”ํ”„์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๋ณ€์ˆ˜์˜ ์†์„ฑ ๋˜ํ•œ ํ•œ ๋‹จ๊ณ„ ๋“ค์–ด๊ฐˆ ๋•Œ๋งˆ๋‹ค ์ปดํ“จํŒ… ์ž์›์ด ์กฐ๊ธˆ ์†Œ๋ชจ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ด ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋กœ์ปฌ ๋ณ€์ˆ˜๋กœ ๋Œ์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋กœ์ปฌ ๋ณ€์ˆ˜๋กœ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. (์†์„ฑ์— ์†์„ฑ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ)

๋กœ์ปฌ ๋ณ€์ˆ˜๋กœ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ

Clone this wiki locally