ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

strict mode๋ž€?

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

 

์˜ค๋ฅ˜๋ฅผ ์ค„์—ฌ ์•ˆ์ •์ ์ธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ, ์ž ์žฌ์ ์ธ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ์–ด๋ ค์šด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ธ strict mode๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

*ESLint : ์ •์  ๋ถ„์„๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์Šค์บ”ํ•˜์—ฌ ๋ฌธ๋ฒ•์  ์˜ค๋ฅ˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ž ์žฌ์  ์˜ค๋ฅ˜๊นŒ์ง€ ์ฐพ์•„๋‚ด๊ณ  ์˜ค๋ฅ˜์˜ ์›์ธ์„ ๋ฆฌํฌํŒ…ํ•ด์ฃผ๋Š” ์œ ์šฉํ•œ ๋„๊ตฌ. ๋ฆฐํŠธ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉด strict mode์™€ ์œ ์‚ฌํ•œ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์–ด ์‹ค์ œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ESLint ๋„๊ตฌ ์‚ฌ์šฉ์ด ์„ ํ˜ธ๋จ


strict mode์˜ ์ ์šฉ

์ „์—ญ์˜ ์„ ๋‘ ๋˜๋Š” ํ•จ์ˆ˜ ๋ชธ์ฒด ์„ ๋‘์— 'use strict'; ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • ์ „์—ญ์˜ ์„ ๋‘์— ์ถ”๊ฐ€ : ์Šคํฌ๋ฆฝํŠธ ์ „์ฒด์— strict mode๊ฐ€ ์ ์šฉ
  • ํ•จ์ˆ˜ ๋ชธ์ฒด ์„ ๋‘์— ์ถ”๊ฐ€ : ํ•ด๋‹น ํ•จ์ˆ˜์™€ ์ค‘์ฒฉ ํ•จ์ˆ˜์— strict mode๊ฐ€ ์ ์šฉ
'use strict';

function foo() {
    x = 10; // ReferenceError
}

foo();

์ „์—ญ์— strict mode๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ”ผํ•˜์ž

์ „์—ญ์— ์ ์šฉํ•œ strict mode๋Š” ์Šคํฌ๋ฆฝํŠธ ๋‹จ์œ„๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. strict mode ์Šคํฌ๋ฆฝํŠธ์™€ non-strict mode ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ˜ผ์šฉํ•˜๋Š” ๊ฒƒ์€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๊ณ , ํŠนํžˆ ์™ธ๋ถ€ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ non-strict mode์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋กœ ์Šคํฌ๋ฆฝํŠธ ์ „์ฒด๋ฅผ ๊ฐ์‹ธ์„œ ์Šค์ฝ”ํ”„๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ  ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ์„ ๋‘์— strcit mode๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค.

 

// ์ฆ‰์ง€ ์‹คํ–‰ ํ•จ์ˆ˜์˜ ์„ ๋‘์— strict mode ์ ์šฉ
(function () {
    'use strict';

    //Do something...
}());

ํ•จ์ˆ˜ ๋‹จ์œ„๋กœ strict mode๋ฅผ ์ ์šฉํ•œ๋Š ๊ฒƒ๋„ ํ”ผํ•˜์ž

strict mode๊ฐ€ ์ ์šฉ๋œ ํ•จ์ˆ˜๊ฐ€ ์ฐธ์กฐํ•  ํ•จ์ˆ˜ ์™ธ๋ถ€์˜ ์ปจํ…์ŠคํŠธ์— strict mode๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. strict mode ํ•จ์ˆ˜์™€ non-strict mode ํ•จ์ˆ˜๋ฅผ ํ˜ผ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฐ”๋žŒ์ง ํ•˜์ง€ ์•Š๊ณ , ๋˜ํ•œ ๋ชจ๋“  ํ•จ์ˆ˜์— ์ผ์ผ์ด strict mode๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฒˆ๊ฑฐ๋กญ๊ธฐ ๋•Œ๋ฌธ์—  ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋กœ ๊ฐ์‹ผ ์Šคํฌ๋ฆฝํŠธ ๋‹จ์œ„๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค.


strcit mode๊ฐ€ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์—๋Ÿฌ

๋‹ค์Œ์€ strict mode๋ฅผ ์ ์šฉํ–ˆ์„ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

 

์‚ฌ๋ก€ ๋ฐœ์ƒ ์—๋Ÿฌ ์„ค๋ช…
์•”๋ฌต์  ์ „์—ญ ReferenceError ์„ ์–ธํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐ
๋ณ€์ˆ˜, ํ•จ์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ญ์ œ SyntaxError delete ์—ฐ์‚ฐ์ž๋กœ ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ญ์ œ
๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„ ์ค‘๋ณต SyntaxError ์ค‘๋ณต๋œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์‚ฌ์šฉ
with ๋ฌธ ์‚ฌ์šฉ SyntaxError with ๋ฌธ์€ ๋™์ผํ•œ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ์ฒด ์ด๋ฆ„์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ๊ฐ€ ๊ฐ„๋‹จํ•ด์ง€์ง€๋งŒ ๊ฐ€๋…์„ฑ์ด ๋‚˜๋น ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ

 

(function () {
    'use strict';
    
    // ์•”๋ฌต์  ์ „์—ญ
    x = 1;
    console.log(x); // ReferenceError

	// ๋ณ€์ˆ˜ ์‚ญ์ œ
    var a = 1;
    delete a; // SyntaxError

    // ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„ ์ค‘๋ณต
    // SyntaxError
    function foo(x, x) {
        return x + x;
    }
    console.log(foo(1,2)); 
    
    // with ๋ฌธ ์‚ฌ์šฉ
    // SyntaxError
    with({y: 1}) {
    	console.log(y);
    }
}());

strict mode ์ ์šฉ์— ์˜ํ•œ ๋ณ€ํ™”

์ผ๋ฐ˜ ํ•จ์ˆ˜์˜ this

์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋Š” this๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— strict mode์—์„œ ํ•จ์ˆ˜๋ฅผ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœํ•˜๋ฉด this์— undefined๊ฐ€ ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค.

 

(function () {
    'use strict';
    function foo() {
        console.log(this); // undefined
    }
    foo();
    
    function Foo() {
        console.log(this); // Foo
    }
    new Foo();
}());

 

arguments ๊ฐ์ฒด

strict mode์—์„œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ „๋‹ฌ๋œ ์ธ์ˆ˜๋ฅผ ์žฌํ• ๋‹นํ•˜์—ฌ ๋ณ€๊ฒฝํ•ด๋„ arguments ๊ฐ์ฒด์— ๋ฐ˜์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

(function (a) {
    'use strict';
    // ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ „๋‹ฌ๋œ ์ธ์ˆ˜๋ฅผ ์žฌํ• ๋‹นํ•˜์—ฌ ๋ณ€๊ฒฝ
    a = 2;

    // ๋ณ€๊ฒฝ๋œ ์ธ์ˆ˜๊ฐ€ arguments ๊ฐ์ฒด์— ๋ฐ˜์˜X
    console.log(arguments); // { 0:1, length: 1};
}(1));

[์ถœ์ฒ˜] ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive

https://wikibook.co.kr/mjs/

 

๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋™์ž‘ ์›๋ฆฌ

269๊ฐœ์˜ ๊ทธ๋ฆผ๊ณผ ์›๋ฆฌ๋ฅผ ํŒŒํ—ค์น˜๋Š” ์„ค๋ช…์œผ๋กœ ‘์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋™์ž‘ ์›๋ฆฌ’๋ฅผ ์ดํ•ดํ•˜์ž! ์›นํŽ˜์ด์ง€์˜ ๋‹จ์ˆœํ•œ ๋ณด์กฐ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ œํ•œ์ ์ธ ์šฉ๋„๋กœ ํƒœ์–ด๋‚œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ณผ๋„

wikibook.co.kr