• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

"use strict" 아래에 with문을 사용한 코드

22.01.08 17:52 작성 조회수 173

0

해당 문장을 작성해보았습니다.

 

1. use strict 없을 때

 
let sampleValue = 10;
let sampleObj = {
    name : "Hong",
    age : 22,
    value : "hi i'm value"
}

function doSomething(value) {
    with(value) {
        console.log(value); //hi, im value
    }
}

console.log(doSomething(sampleObj));

없을 때는 정상적으로 동작하고,

신기했던 점은 with문의 표현식 안에 있는 value가 객체 전체를 반환하는 것이 아니라 객체 내부의 프로퍼티에 직접 접근해서 프로퍼티를 반환했습니다.

언뜻 편할 것 같지만, 다른 개발자가 이 코드를 봤을 때 정확히 무엇을 매개변수로 받아들이고 있는지 모른다면, 모호할 수 있는 문장이라고 생각이 들었습니다.

 

2. "use strict"가 있을 때

"use strict"

let sampleValue = 10;
let sampleObj = {
    name : "Hong",
    age : 22,
    value : "hi i'm value"
}

function doSomething(value) {
    with(value) {
        console.log(value); //hi, im value
    }

}

console.log(doSomething(sampleObj));
//Strict mode code may not include a with statement

그리고 "use strict"를 사용하니 이런 에러가 발생했습니다.

스트릭트 모드에서는 with문을 포함하지 않는다는 문구인 것 같은데, 위의 문장의 모호성 때문에 ESLint에서는 with문을 사용하지 못하도록 문법이 바뀐 걸까요?

조금 신기합니다.

답변 1

답변을 작성해보세요.

1

그렇습니다.
strict 모드에서는 with 문을 사용할 수 없도록 바뀌었습니다.
이유에 대해서 중고급 강좌에서 다룹니다.
----------

기본 강좌에서 다룹니다만, let sampleObj = {} 형태는 let보다 const를 사용합니다.