javascript - variable - w3school promise




자바 스크립트에서 "엄격한 사용"이란 무엇이며 그 배후에있는 추론은 무엇입니까? (17)

최근에 Crockford의 JSLint 통해 JavaScript 코드를 실행했는데 다음과 같은 오류가 발생했습니다.

문제 1 행 1 문자 : "엄격한 사용"문이 없습니다.

일부 검색을 수행하면 일부 사람들은 "use strict"; 추가한다는 사실을 깨달았습니다 "use strict"; JavaScript 코드로 변환합니다. 문을 추가하면 오류가 표시되지 않습니다. 불행히도 Google은이 문자열 문구 뒤에 숨겨진 많은 역사를 밝히지 않았습니다. 브라우저가 자바 스크립트를 해석하는 방법과 관련이있을 것입니다.하지만 그 효과가 무엇인지 전혀 알지 못합니다.

그렇다면 "use strict"; 이란 무엇입니까 "use strict"; 이 모든 것이 묵시적이며, 여전히 관련이 있습니까?

현재 브라우저 중 하나라도 "use strict"; 응답합니까 "use strict"; 문자열 또는 미래 사용을위한 것인가?


'use strict'; 갑자기 코드를 개선하지 않습니다.

JavaScript strict 모드ECMAScript 5 의 기능입니다. 엄격한 모드는 스크립트 / 함수 맨 위에 선언하여 활성화 할 수 있습니다.

'use strict';

자바 스크립트 엔진이이 지시어를 볼 때 특수 모드에서 코드를 해석하기 시작합니다. 이 모드에서는 잠재적 인 버그가 될 수있는 특정 코딩 방법이 감지 될 때 오류가 발생합니다 (엄격 모드의 추론 임).

다음 예제를 고려하십시오.

var a = 365;
var b = 030;

숫자 리터럴을 일렬로 늘어 놓기 위해 개발자는 부주의하게 변수 b 를 8 진수로 초기화했습니다. 비 엄격 모드는 이것을 숫자 리터럴 값 24 (10 진수)로 해석합니다. 그러나 엄격 모드에서는 오류가 발생합니다.

엄격 모드의 전문 분야에 대한 전체 목록은 이 답변을 참조하십시오.

어디에서 'use strict'; 사용 'use strict'; 합니까 'use strict'; ?

  • JavaScript 응용 프로그램에서 : 물론입니다! Strict 모드는 코드로 무언가를 할 때 내부 고발자 (whistleblower)로 사용할 수 있습니다.

  • 기존 JavaScript 코드에서 : 아마도 아닙니다! 기존 JavaScript 코드에 strict 모드에서 금지 된 명령문이 있으면 응용 프로그램이 중단됩니다. 엄격 모드를 원할 경우 기존 코드를 디버그하고 수정할 준비가되어 있어야합니다. 이것이 'use strict'; 이유입니다 'use strict'; 갑자기 코드를 개선하지 않습니다 .

엄격 모드는 어떻게 사용합니까?

  1. 'use strict'; 삽입하십시오 'use strict'; 귀하의 스크립트 상단에 진술 :

    // File: myscript.js
    
    'use strict';
    var a = 2;
    ....
    

    myscript.js 파일의 모든 내용은 엄격 모드로 해석됩니다.

  2. 또는 'use strict'; 삽입하십시오 'use strict'; 함수 본문 위에 문장 :

    function doSomething() {
        'use strict';
        ...
    }
    

    함수의 어휘 범위 에있는 모든 것은 엄격 모드로 해석 될 것입니다. 어휘 범위 는 여기에서 중요합니다. 더 자세한 설명은 이 답변 을 참조하십시오.

엄격 모드에서는 어떤 것들이 금지되어 있습니까?

엄격 모드에서 금지 된 몇 가지 사항을 설명하는 멋진 기사 를 발견했습니다 (독점 목록이 아님).

범위

역사적으로 JavaScript는 함수의 범위가 어떻게 달라 졌는지 혼란스러워했습니다. 때로는 정적으로 범위가 지정된 것처럼 보일 수도 있지만 일부 기능은 동적 범위와 같이 동작합니다. 혼란 스럽기 때문에 프로그램을 읽고 이해하기가 어렵습니다. 오해로 인해 버그가 발생합니다. 또한 성능에 문제가 있습니다. 정적 범위 지정은 컴파일 시간에 변수 바인딩을 허용하지만 동적 범위 요구 사항은 런타임에 바인딩을 연기해야한다는 것을 의미하며 이로 인해 성능이 크게 저하됩니다.

Strict 모드에서는 모든 변수 바인딩이 정적으로 수행되어야합니다. 즉 이전에는 동적 바인딩이 필요한 기능을 제거하거나 수정해야합니다. 특히 with 문이 제거되고 eval 함수의 호출자 환경을 변조하는 기능이 심각하게 제한됩니다.

엄격한 코드의 이점 중 하나는 YUI Compressor 와 같은 도구가 처리 할 때 더 나은 작업을 수행 할 수 있다는 것입니다.

내포 된 전역 변수

JavaScript는 전역 변수를 암시합니다. 변수를 명시 적으로 선언하지 않으면 전역 변수가 내재적으로 선언됩니다. 이것은 기본적인 관리 작업을 간과 할 수 있기 때문에 프로그래밍을 초보자가 쉽게 할 수있게 해줍니다. 그러나 더 큰 프로그램의 관리가 훨씬 어려워지며 안정성이 크게 떨어집니다. 따라서 엄격 모드에서는 묵시적인 전역 변수가 더 이상 생성되지 않습니다. 모든 변수를 명시 적으로 선언해야합니다.

글로벌 누출

전역 객체에 바인딩 될 수있는 여러 가지 상황이 있습니다. 예를 들어, 생성자 함수를 호출 할 때 new 접두사를 제공하는 것을 잊어 버리면 생성자가 전역 객체에 예기치 않게 바인딩되므로 새 객체를 초기화하는 대신 자동으로 전역 변수가 변경됩니다. 이러한 상황에서 strict 모드는 대신 thisundefined 바인딩하므로 생성자가 대신 예외를 throw하여 훨씬 빨리 오류를 감지 할 수 있습니다.

시끄러운 실패

JavaScript는 항상 읽기 전용 속성을 가지고 있지만 ES5의 Object.createProperty 함수가 해당 기능을 노출 할 때까지는 사용자가 직접 만들 수 없습니다. 읽기 전용 속성에 값을 할당하려고하면 자동으로 실패합니다. 과제가 속성의 값을 변경하지는 않지만 프로그램이 마치 진행되는 것처럼 진행됩니다. 이는 프로그램이 일관성없는 상태가 될 수있는 무결성 위험입니다. 엄격 모드에서 읽기 전용 속성을 변경하려고 시도하면 예외가 발생합니다.

8 진법

숫자의 8 진수 (또는 기본 8) 표현은 단어 크기가 3의 배수 인 기계에서 기계 레벨 프로그래밍을 수행 할 때 매우 유용했습니다. 단어 크기가 60 비트 인 CDC 6600 메인 프레임으로 작업 할 때는 8 진수가 필요했습니다. 8 진수를 읽을 수 있다면 단어를 20 자리로 볼 수 있습니다. 두 자리 숫자는 op 코드를 나타내고 한 자리 숫자는 8 개의 레지스터 중 하나를 나타냅니다. 기계어 코드에서 고수준 언어로 천천히 전환하는 동안 프로그래밍 언어에 8 진수 형식을 제공하는 것이 유용하다고 생각되었습니다.

C에서는 매우 불행한 8 진수 표현이 선택되었습니다. 선행 0. 따라서 C에서 0100 은 100이 아니라 64를 의미하고 0808 이 아니라 오류입니다. 더욱 불행하게도이 시대 착오는 JavaScript를 포함하여 거의 모든 현대 언어에 복사되어 오류를 만드는 데에만 사용됩니다. 다른 용도는 없습니다. 따라서 엄격 모드에서는 8 진수 형식이 더 이상 허용되지 않습니다.

등등

인수 pseudo 배열은 ES5에서 조금 더 배열과 같습니다. strict 모드에서는 calleecaller 속성을 잃어 버립니다. 이렇게하면 많은 기밀 컨텍스트를 포기하지 않고 신뢰할 수없는 코드에 arguments 를 전달할 수 있습니다. 또한 함수의 arguments 속성이 제거되었습니다.

strict 모드에서 함수 리터럴의 중복 키는 구문 오류를 생성합니다. 함수는 같은 이름을 가진 두 개의 매개 변수를 가질 수 없습니다. 함수는 매개 변수 중 하나와 같은 이름을 가진 변수를 가질 수 없습니다. 함수는 자체 변수를 delete 수 없습니다. 구성 할 수없는 속성을 delete 하려고 시도하면 예외가 발생합니다. 원시 값은 내재적으로 랩핑되지 않습니다.

향후 자바 스크립트 버전 용 예약어

ECMAScript 5는 예약어 목록을 추가합니다. 변수 나 인수로 사용하면 엄격 모드에서는 오류가 발생합니다. 예약어는 다음과 같습니다.

interface , package , private , protected , public , staticyield

더 읽을 거리


"엄격 사용"; 프로그래머가 JavaScript의 느슨한 속성이나 나쁜 속성을 사용하지 않을 것이라는 보험입니다. 통치자가 직선을 만드는 데 도움이되는 것처럼 가이드입니다. "Strict 사용"은 "스트레이트 코딩"을 도와줍니다.

눈금자를 사용하지 않으려는 사람들은 일반적으로 다른 사람들이 코드를 디버깅하도록 요청하는 페이지에서 끝납니다.

나를 믿어.오버 헤드는 잘못 설계된 코드에 비해 무시할 수 있습니다. 몇 년 동안 수석 JavaScript 개발자였던 Doug Crockford는 여기에 매우 흥미로운 게시물을 올렸습니다 . 개인적으로 나는 그의 좋은 연습을 잊지 않도록 항상 그의 사이트로 돌아가고 싶다.

최신 자바 스크립트 실습은 항상 "엄격한 사용"을 불러 일으켜야합니다. 프라그마. ECMA Group이 "엄격한"모드를 선택 사항으로 만들었던 유일한 이유는 경험이 부족한 코더가 JavaScript에 액세스 할 수있게하고 새롭고 안전한 코딩 방법에 적응할 시간을주는 것입니다.


Strict 모드는 일반적인 자바 스크립트 의미를 몇 가지 변경합니다.

  • 오류를 발생 시키도록 변경하여 일부 JavaScript 자동 오류를 제거합니다.

  • JavaScript 엔진이 최적화를 수행하기가 어렵게 만드는 실수를 수정합니다.

  • ECMAScript의 향후 버전에서 정의 될 가능성이있는 구문을 금지합니다.

자세한 내용은 vistit Strict Mode- Javascript 를 참조하십시오.


그것은 ECMAScript 5의 새로운 기능입니다. John Resig는 그것 의 좋은 요약 을 썼습니다.

이것은 자바 스크립트 파일 (파일의 상단 또는 함수의 내부)에 다음과 같이 삽입 한 문자열입니다.

"use strict";

이제 코드에 넣으면 현재의 브라우저에서 문제가 발생하지 않습니다. 단지 문자열 일뿐입니다. 코드가 pragma를 위반하는 경우 나중에 코드에 문제가 발생할 수 있습니다. 예를 들어, foo 먼저 정의하지 않고 foo = "bar" 를 사용하면 코드가 실패하기 시작합니다 ... 제 생각에는 좋은 점입니다.


모든 개발자가 엄격 모드 사용을 강력히 권장합니다. 엄격한 모드가 코드에서 알지 못했던 오류를 방지하는 데 합법적 인 도움을 줄 것이라는 점을지지하는 브라우저가 충분합니다.

분명히 초기 단계에서 우리가 전에 만나지 못했던 오류가있을 것입니다. 모든 이점을 얻으려면 엄격 모드로 전환 한 후 적절한 테스트를 수행하여 모든 것을 포착했는지 확인해야합니다. 확실히 우리는 코드에 use strict 던지거나 오류가 없다고 가정합니다. 따라서이 훌륭한 언어 기능을 사용하여 더 나은 코드를 작성해야 할 때가되었습니다.

예를 들어,

var person = {
    name : 'xyz',
    position : 'abc',
    fullname : function () {  "use strict"; return this.name; }
};

JSLint 는 Douglas Crockford가 작성한 디버거입니다. 스크립트에 붙여 넣기 만하면 코드에서 눈에 띄는 문제와 오류를 빠르게 검사 할 수 있습니다.


작년에 출시 된 브라우저를 사용하는 경우 자바 스크립트 엄격 모드를 지원할 가능성이 큽니다. ECMAScript 5가 현재 표준이 된 이전 브라우저 만 지원하지 않습니다.

명령 주위의 따옴표는 엄격한 모드에서 구문 오류를 생성하는 것들이 일반적으로 오래된 브라우저에서 일부 어려운 방법으로 스크립트가 오작동을 일으킬지라도 코드가 구형 브라우저에서도 여전히 작동하는지 확인합니다.


w3schools에서 인용 :

"엄격한 사용"지침

"strict strict"지시문은 JavaScript 1.8.5 (ECMAScript 버전 5)의 새로운 기능입니다.

이것은 진술이 아니며 리터럴 표현식이며 이전 버전의 JavaScript에서는 무시됩니다.

"엄격한 사용"은 코드가 "엄격 모드"로 실행되어야 함을 나타 내기위한 것입니다.

엄격 모드에서는 예를 들어 선언되지 않은 변수를 사용할 수 없습니다.

왜 엄격한 모드입니까?

Strict 모드를 사용하면 "안전한"JavaScript를 더 쉽게 작성할 수 있습니다.

엄격한 모드는 이전에 허용 된 "잘못된 구문"을 실제 오류로 변경합니다.

예를 들어, 일반적인 JavaScript에서는 변수 이름을 잘못 입력하면 새로운 전역 변수가 만들어집니다. 엄격 모드에서는 실수로 전역 변수를 만들 수 없으므로 오류가 발생합니다.

일반적인 JavaScript에서는 개발자가 쓰기 권한이없는 속성에 값을 할당하는 오류 피드백을받지 못합니다.

엄격 모드에서 쓰기 권한이없는 속성, 가져 오기 전용 속성, 존재하지 않는 속성, 존재하지 않는 변수 또는 존재하지 않는 객체에 대한 할당은 오류를 발생시킵니다.

자세한 내용은 http://www.w3schools.com/js/js_strict.asp 를 참조하십시오.


"use strict";"use strict"; 브라우저가 Strict 모드를 사용하도록 지시합니다. 엄격 모드는 JavaScript의 축소되고 안전한 기능입니다.

기능 목록 (비 한정적인)

  1. 전역 변수를 허용하지 않습니다. (변수 이름에 var 선언 및 오타가 누락 된 경우)

  2. 사일런트 실패 지정은 엄격 모드에서 오류를 발생시킵니다 ( NaN = 5; 지정).

  3. 삭제 불가능한 속성을 삭제하려고 시도하면 ( delete Object.prototype )

  4. 객체 리터럴의 모든 속성 이름이 고유해야합니다 ( var x = {x1: "1", x1: "2"} ).

  5. 함수 매개 변수 이름은 고유해야합니다 ( function sum (x, x) {...} ).

  6. 8 진수 구문을 금지합니다 ( var x = 023; 일부 devs는 앞의 0이 숫자를 변경하는 데 아무런 역할을하지 않는다고 잘못 가정합니다).

  7. with 키워드를 금지합니다.

  8. 엄격 모드의 eval 은 새로운 변수를 도입하지 않습니다.

  9. 일반 이름 삭제를 금지합니다 ( delete x; ).

  10. 임의의 형식으로 evalarguments 를 바인딩하거나 할당하는 것을 금지합니다.

  11. Strict 모드는 형식 매개 변수를 사용하여 arguments 객체의 속성을 별칭으로 지정하지 않습니다. (즉, function sum (a,b) { return arguments[0] + b;} arguments[0]a 바인딩되어 있기 때문에 작동합니다.)

  12. arguments.callee 는 지원되지 않습니다.

[참고 : Strict 모드 , Mozilla 개발자 네트워크 ]


"use strict"엄격한 모드 에서 실행되도록 JavaScript 코드를 만듭니다. 기본적으로 사용하기 전에 모든 것을 정의해야합니다. 엄격 모드 사용의 주된 이유는 정의되지 않은 메소드의 우발적 인 전역 사용을 방지하기 위해서입니다.

또한 strict 모드에서는 작업 속도가 빨라지거나 경고 또는 침묵 경고가 치명적인 오류를 발생 시키므로 항상 깔끔한 코드를 작성하는 것이 좋습니다.

"use strict"ECMA5에서 널리 사용되어야합니다. ECMA6에서는 기본적으로 JavaScript의 일부 이므로 ES6을 사용하는 경우 추가 할 필요가 없습니다.

MDN의 다음 진술과 예제를보십시오.

"strict
use"지시문 "strict strict"지시어는 JavaScript 1.8.5 (ECMAScript 버전 5)의 새로운 기능입니다. 이것은 진술이 아니며 리터럴 표현식이며 이전 버전의 JavaScript에서는 무시됩니다. "엄격한 사용"은 코드가 "엄격 모드"로 실행되어야 함을 나타 내기위한 것입니다. 엄격 모드에서는 예를 들어 선언되지 않은 변수를 사용할 수 없습니다.

"use strict"사용의 예 :
함수에 엄격 모드 : 마찬가지로 함수에 엄격 모드를 호출하려면 정확한 구문 "use strict"를 입력하십시오. (또는 'use strict';)를 다른 함수보다 먼저 사용하십시오.

1) 함수의 엄격 모드

 function strict() {
     // Function-level strict mode syntax
     'use strict';
     function nested() { return 'And so am I!'; }
     return "Hi!  I'm a strict mode function!  " + nested();
 }
 function notStrict() { return "I'm not strict."; }

 console.log(strict(), notStrict());

2) 전체 스크립트 엄격 모드

'use strict';
var v = "Hi! I'm a strict mode script!";
console.log(v);

3) 쓰기 불가능한 전역 할당

'use strict';

// Assignment to a non-writable global
var undefined = 5; // throws a TypeError
var Infinity = 5; // throws a TypeError

// Assignment to a non-writable property
var obj1 = {};
Object.defineProperty(obj1, 'x', { value: 42, writable: false });
obj1.x = 9; // throws a TypeError

// Assignment to a getter-only property
var obj2 = { get x() { return 17; } };
obj2.x = 5; // throws a TypeError

// Assignment to a new property on a non-extensible object.
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = 'ohai'; // throws a TypeError

MDN에 대해 더 많은 것을 읽을 수 있습니다 .


use strict 사용을 걱정하는 사람들은이 기사를 살펴 보는 것이 use strict .

ECMAScript 5 브라우저에서 '엄격 모드'지원. 이것은 무엇을 의미 하는가?
NovoGeek.com - 크리슈나의 블로그

브라우저 지원에 대해 이야기하지만 더 중요한 것은 안전하게 처리하는 방법입니다.

function isStrictMode(){
    return !this;
} 
/*
   returns false, since 'this' refers to global object and 
   '!this' becomes false
*/

function isStrictMode(){   
    "use strict";
    return !this;
} 
/* 
   returns true, since in strict mode the keyword 'this'
   does not refer to global object, unlike traditional JS. 
   So here, 'this' is 'undefined' and '!this' becomes true.
*/

내 두 센트 :

엄격 모드의 목표 중 하나는 문제를 더 빨리 디버깅 할 수 있도록하는 것입니다. 그것은 당신의 웹 페이지의 침묵하고 이상한 행동을 일으킬 수있는 어떤 잘못된 것들이 발생했을 때 예외를 던짐으로써 개발자들을 돕습니다. use strict 사용 use strict 순간 코드는 개발자가 사전에 해결할 수 있도록 오류를 발생시킵니다.

use strict 후 배운 몇 가지 중요한 것들 :

전역 변수 선언 금지 :

var tree1Data = { name: 'Banana Tree',age: 100,leafCount: 100000};

function Tree(typeOfTree) {
    var age;
    var leafCount;

    age = typeOfTree.age;
    leafCount = typeOfTree.leafCount;
    nameoftree = typeOfTree.name;
};

var tree1 = new Tree(tree1Data);
console.log(window);

이제이 코드는 window.nameoftree 사용하여 액세스 할 수있는 전역 범위에서 nameoftree 를 만듭니다. use strict 를 구현하면 코드에서 오류가 발생합니다.

Uncaught ReferenceError : nameoftree가 정의되지 않았습니다.

Sample

성명서 삭제 :

with 문은 uglify-js 와 같은 도구를 사용하여 축소 할 수 없습니다. 또한 향후 JavaScript 버전에서 deprecated 제거됩니다.

Sample

중복 방지 :

중복 된 속성이 있으면 예외를 throw합니다.

Uncaught SyntaxError : Strict 모드에서 객체 리터럴의 중복 데이터 속성을 사용할 수 없습니다.

"use strict";
var tree1Data = {
    name: 'Banana Tree',
    age: 100,
    leafCount: 100000,
    name:'Banana Tree'
};

몇 가지 더 있지만 나는 그것에 대해 더 많은 지식을 습득해야합니다.


JavaScript "strict"모드는 ECMAScript 5에서 도입되었습니다.

  (function() {
  "use strict";
   your code...
   })();

"엄격한 사용"작성; JS 파일의 맨 위에는 엄격한 구문 검사가 사용됩니다. 그것은 우리를 위해 다음 작업을 수행합니다 :

(i) 선언되지 않은 변수에 할당하려고하면 오류가 표시됩니다.

(ii) 주요 JS 시스템 라이브러리를 덮어 쓰지 못하도록합니다.

(ii) 일부 안전하지 않거나 오류가 발생하기 쉬운 언어 기능 금지

"엄격한 사용"은 개별 기능 내부에서도 작동합니다. "항상 코드에 엄격한 사용"을 포함하는 것이 더 좋습니다.

브라우저 호환성 문제 : "use"지시어는 하위 호환 가능을 의미합니다. 그들을 지원하지 않는 브라우저는 더 이상 참조되지 않는 문자열 리터럴을 보게됩니다. 그래서 그들은 그것을 넘어서서 계속 나아갈 것입니다.


비교할 작은 예 :

비 엄격 모드 :

for (i of [1,2,3]) console.log(i)

// output:
// 1
// 2
// 3

엄격 모드 :

'use strict';
for (i of [1,2,3]) console.log(i)

// output:
// Uncaught ReferenceError: i is not defined

"엄격한 사용"; JavaScript를 좀 더 강력하게 만드는 ECMA 노력입니다. 그것은 JS에서 최소한 "엄격한"(다른 언어는 90 년대 이래로 엄격한 규칙을 구현합니다) 시도를 시도합니다. 실제로 JavaScript 개발자는 일종의 코딩 모범 사례를 따르도록 "강요"합니다. 여전히 JavaScript는 매우 약합니다. 유형이 지정된 변수, 유형이 지정된 메소드 등은 없습니다. 자바 스크립트 개발자는 Java 또는 ActionScript3와 같은보다 견고한 언어를 배우고 JavaScript 코드에서 동일한 모범 사례를 구현할 것을 강력히 권장합니다. 더 잘 작동하고 더 쉬워집니다. 디버그.


개발자가 사용해야하는 주된 이유 "use strict"는 다음과 같습니다.

  1. 실수로 전역 변수 "use strict()"를 선언하는 것을 방지 var합니다. 사용 하면 변수 를 사용하기 전에 선언 해야합니다. 예 :

    function useStrictDemo(){
     'use strict';
     //works fine
     var a = 'No Problem';
    
     //does not work fine and throws error
     k = "problem"
    
     //even this will throw error
     someObject = {'problem': 'lot of problem'};
    }
    
  2. 주의 : "use strict"지시문은 스크립트 또는 함수의 시작 부분에서만 인식됩니다.
  3. 문자열 "arguments"을 변수로 사용할 수 없습니다.

    "use strict";
    var arguments = 3.14;    // This will cause an error
    
  4. 키워드 사용을 변수로 제한합니다. 그들을 사용하려고하면 오류가 발생합니다.

짧게하면 코드 오류가 발생하기 어렵게되고 차례로 좋은 코드를 작성하게됩니다.

그것에 대해 더 자세히 읽으려면 여기 를 참조 하십시오 .


그 주 use strict에 도입 된 ECMA 스크립트 (5) 그 이후로 유지했다.

다음은 ES6ES7 에서 엄격 모드 실행 조건입니다 .

  • 글로벌 코드는 Strict Directive (14.1.1 참조)가 포함 된 Directive Prologue로 시작하는 경우 엄격한 모드 코드입니다.
  • 모듈 코드는 항상 엄격한 모드 코드입니다.
  • ClassDeclaration 또는 ClassExpression 의 모든 부분 은 엄격한 모드 코드입니다.
  • Eval code는 Strict Directive를 포함하는 Directive Prologue로 시작하거나 eval에 대한 호출이 Strict Mode 코드에 포함 된 직접 평가 (12.3.4.1 참조) 인 경우 엄격한 모드 코드입니다.
  • 함수 코드는 연관된 FunctionDeclaration, FunctionExpression, GeneratorDeclaration, GeneratorExpression, MethodDefinition 또는 ArrowFunction 이 엄격 모드 코드에 포함되어 있거나 함수의 [[ECMAScriptCode]] 내부 슬롯의 값을 생성하는 코드가 Directive Prologue로 시작하는 경우 엄격 모드 코드입니다 여기에는 Use Strict Directive가 포함되어 있습니다.
  • 마지막 인수가 Useful Strict 지시어가 포함 된 Directive Prologue로 시작 하는 FunctionBody 인 String 인 경우 내장 된 Function 및 Generator 생성자에 대한 인수로 제공되는 함수 코드는 엄격한 모드 코드 입니다.

포함 use strict이 시점에서 모든 민감한 자바 스크립트 파일의 시작 부분에서하는 것은 더 나은 자바 스크립트 프로그래머가 될 글로벌 해지고 상황이 자동으로 변경 확률 변수를 피하기 위해 작은 방법입니다.





use-strict