Skip to content

Commit

Permalink
docs(20): 20. strict mode (#111)
Browse files Browse the repository at this point in the history
* docs(20): 20장 기억에 남는 내용 추가

* docs(20): 20장 간단한 퀴즈 추가

* fix: 불필요한 테스트 파일 삭제

---------

Co-authored-by: LSH-0125e <[email protected]>
  • Loading branch information
LSH-0125 and LSH-0125e authored Mar 14, 2023
1 parent 9fd4459 commit 352ac78
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# ✏️ 기억에 남는 내용

- **strict mode**
+ **암묵적 전역**: 자바스크립트 엔진이 암묵적으로 전역 객체에 프로퍼티를 동적으로 생성하여 전역 변수처럼 사용할 수 있게 하는 현상 (선언하지 않았지만 전역변수 취급)
+ 이와 같은 '잠재적인 오류'를 발생시키기 어려운 개발 환경에서 개발하는 것이 실수를 방지하고 안정적인 코드를 생산하는 데에 바람직하다. (암묵적 X, 명시적인 에러 발생) -> *strict mode*
+ **린트 도구**
* 정적 분석 기능을 통해 소스코드를 실행하기 전에 문법적 오류 뿐만 아니라 잠재적 오류까지 찾아내고 오류의 원인을 리포팅해주는 도구이다.
* strict mode 의 대체재로, 더 선호되기도 한다.

- **strict mode의 적용**
+ 'use strict'; 를 전역의 선두 또는 함수 몸체의 선두에 추가한다.
+ 전역의 선두에 추가하게 되면 스크립트 전체에 strict mode가 적용되는데, 이는 사용중인 외부 서드파티 라이브러리가 non-strict mode 인 경우 혼용하게 되기 때문에 바람직하지 않다. (전역 단위 strict mode는 피하자.)
+ 같은 이유로, strict mode와 non-strict mode을 혼용하는 것을 막기 위해 함수 단위로 strict mode를 적용하는 것이 피해야한다.
+ ***따라서 strict mode는 즉시 실행 함수로 감싼 스크립트 단위로 적용하는 것이 바람직하다.***

- **strict mode의 동작**
+ **발생시키는 에러**
* 선언하지 않은 변수를 참조하면 ReferenceError가 발생한다. (암묵적 전역)
* delete 연산자로 변수, 함수, 매개변수를 삭제하면 SyntaxError가 발생한다.
* 중복된 매개변수 이름을 사용하면 SyntaxError가 발생한다.
* with 문을 사용하면 SyntaxError가 발생한다. with 문은 성능과 가독성을 해치므로 사용하지 않는 것이 좋다.
+ **적용에 의한 변화**
* 함수를 일반 함수로 호출하면 this에 undefined가 바인딩된다. (에러 발생 X)
* 매개변수에 전달된 인수를 재할당하여 변경해도 arguments 객체에 반영되지 않는다.
62 changes: 62 additions & 0 deletions 7주차 (20~22장)/20. strict mode/LSH0125/퀴즈.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# 📝 간단한 퀴즈
1. 아래 세 가지 경우 중 가장 바람직하게 strict 모드를 적용한 경우는 어느 것인지 고르고, 나머지 두 경우는 어떤 부분이 문제가 될 수 있는지 간단하게 설명해봅시다.

```javascript
// case 1
'use strict';

function foo() {
x = 10;
}

function bar() {
y = 20;
}

foo();
bar();

console.log(x);
console.log(y);
```

```javascript
// case 2
function foo() {
'use strict';

x = 10;
}

function bar() {
'use strict';

y = 20;
}

foo();
bar();

console.log(x);
console.log(y);
```

```javascript
// case 3
(function () {
'use strict';

function foo() {
x = 10;
}

function bar() {
y = 20;}

foo();
bar();

console.log(x);
console.log(y);
}());
```

0 comments on commit 352ac78

Please sign in to comment.