연구 노트 2—JavaScript 언어 기반

1 ECMAScript와 JavaScript의 차이점과 연결

1. ECMAScript는 JavaScript의 사양이고 JavaScript는 ECMAScript의 구현이며 일상적인 상황에서이 두 단어는 서로 바꿔 사용할 수 있습니다.
JavaScript의 창시자 인 Netscape는이 언어가 국제 표준이 될 수 있기를 바라면서 국제 표준화기구 인 ECMA에 JavaScript를 제출했습니다. 나중에 ECMA는 표준 문서 (ECMA-262)의 첫 번째 버전을 발표했습니다. 브라우저 스크립팅 언어 및이 언어를 ECMAScript라고합니다. 이 표준은 처음부터 JavaScript 언어 용으로 공식화되었습니다. JavaScript라고 불리지 않는 이유에는 두 가지가 있습니다. 하나는 상표입니다. Java는 Sun의 상표입니다. 라이센스 계약에 따르면 Netscape만이 합법적으로 JavaScript라는 이름을 사용할 수 있습니다. , JavaScript 자체도 Netscape의 상표로 등록되었습니다. 두 번째는이 언어의 작성자가 Netscape가 아니라 ECMA라는 사실을 반영하여이 언어의 개방성과 중립성을 보장하는 데 도움이됩니다.

2. 그러나 사실 JavaScript는 ECMA-262보다 훨씬 더 많은 의미를 가지고 있습니다. 완전한 JavaScript 구현은 다음 세 부분으로 구성되어야합니다.

  1. ECMAScript : 핵심

  2. DOM : 문서 객체 모델

  3. BOM : 브라우저 개체 모델

2 문법

(1) 식별자 : 변수, 함수, 속성 또는 함수 매개 변수의 이름. 첫 번째 문자는 문자, 밑줄 _ 또는 달러 기호 $ 여야합니다. 나머지 문자는 문자, 밑줄, 달러 기호 또는 숫자 일 수 있습니다.
관례 상 ECMAScript 식별자는 카멜 케이스를 사용합니다. 즉, 첫 번째 단어의 첫 글자는 소문자이고 각 후속 단어의 첫 글자는 대문자입니다.
(2) 주석 : ECMAScript는 한 줄 주석 및 블록 주석을 포함하여 C 언어 스타일 주석을 사용합니다. 한 줄 주석은 다음과 같이 두 개의 슬래시 문자로 시작합니다.

//单行注释

블록 주석은 슬래시와 별표 (/ )로 시작하고 역 조합 ( /)으로 끝납니다 . 예를 들면 다음과 같습니다.

/*
这是多行注释
*/

(3) 키워드 및 예약어
ECMA-262는 예약 된 키워드 세트를 설명하며, 이러한 키워드는 제어문의 시작과 끝을 표시하거나 특정 작업을 수행하는 것과 같은 특별한 목적을 가지고 있습니다. 규정에 따라 예약 된 키워드는 식별자 또는 속성 이름으로 사용할 수 없습니다.
사양은 또한 식별자 또는 속성 이름으로 사용할 수없는 향후 예약어 집합을 설명합니다. 예약어는 언어에서 특정 목적이 없지만 향후 키워드로 사용하기 위해 예약되어 있습니다.
(4)
ECMAScript의 문은 다음 과 같이 세미콜론으로 끝납니다.

let sum = a+b
let diff = a-b;

문 끝에 세미콜론이 필요하지 않더라도 추가해야합니다. 세미콜론을 추가하면 개발자가 빈 줄을 삭제하여 코드를 압축하는 것이 편리합니다. 세미콜론을 추가하면 구문 오류를 수정하기 위해 올바른 위치에 세미콜론을 추가하려고하기 때문에 경우에 따라 성능 향상에 도움이 될 수도 있습니다.

변수 3 개

ECMAScript 변수는 느슨하므로 변수를 사용하여 모든 유형의 데이터를 저장할 수 있습니다. 변수를 선언하는 키워드는 var, const, let입니다. 그중 var는 모든 버전의 ECMAScript에서 사용할 수있는 반면 const 및 let은 ECMAScript6 이상 버전에서만 사용할 수 있습니다.

3.1 var

var message; //变量定义

초기화하지 않으면 변수는 정의되지 않은 특수 값을 보유합니다.

var message = "hi"; //变量定义同时设置值

(1) Var 선언 범위
var 연산자에 의해 정의 된 변수는이를 포함하는 함수의 지역 변수가됩니다. 예를 들어 var를 사용하여 함수 내부에 변수를 정의한다는 것은 변수가 함수 내부에 변수를 정의한다는 것을 의미합니다. 즉, 함수가 시작될 때 변수가 소멸됨을 의미합니다.

        function test(){
    
    
            var message = "hi"; //局部变量
        }
        test();
        console.log(message); //出错!

여기서 메시지 변수는 함수 내에서 var를 사용하여 정의됩니다. 이 함수는 test ()라고하며,이 함수를 호출하면이 변수가 생성되고 여기에 값이 할당됩니다. 변수는 호출 후 즉시 소멸되므로 오류가보고됩니다. 그러나 함수에서 변수를 정의 할 때 var 연산자를 생략하여 전역 변수를 만들 수 있습니다.

        function test(){
    
    
            message = "hi"; //全局变量
        }
        test();
        console.log(message); //“hi”

이전 var 연산자를 제거하면 메시지는 전역 변수가되며 test () 함수를 한 번만 호출하면이 변수가 정의되어 함수 외부에서 액세스 할 수 있습니다.
여러 변수를 정의해야하는 경우 명령문에서 쉼표로 각 변수를 구분할 수 있습니다.

var message = "hi",found = false,age = 29;

ECMAScript는 느슨한 형식이므로 다른 데이터 형식으로 초기화 된 변수는 하나의 문으로 선언 할 수 있습니다.
(2) Var 선언 승격
var를 사용할 때 다음 코드는이 키워드로 선언 된 변수가 자동으로 함수 범위의 맨 위로 승격되기 때문에 오류를보고하지 않습니다.

        function foo() {
    
    
            console.log(age);
            var age = 26;
        }
        foo();

오류가보고되지 않는 이유는 ECMAScript가 다음 코드와 동일하게 실행하기 때문입니다.

        function foo() {
    
    
            var age;
            console.log(age);
            age = 26;
        }
        foo(); //undefined

이것은 모든 변수 선언을 함수 범위의 맨 위로 가져 오는 호이스트입니다. 또한 동일한 변수를 선언하기 위해 var를 반복적으로 사용하는 데 문제가 없습니다.

        function foo() {
    
    
            var age = 16;
            var age = 26;
            var age = 36;
            console.log(age);
        }
        foo(); //36

3.2 렛

(1) Let과 var는 비슷한 기능을 가지고 있지만 매우 중요한 차이점이 있는데 가장 명백한 것은 let 선언의 범위는 블록 범위이고 var 선언의 범위는 function 범위라는 것 입니다.

        if (true){
    
    
            var name = 'lq';
            console.log(name); //lq
        }
        console.log(name); //lq

        if(true){
    
    
            let age = 26;
            console.log(age); //26
        }
        console.log(age); //ReferenceError:age没有定义

나이 변수는 범위가 블록 내부로 제한되므로 if 블록 외부에서 참조 할 수 없습니다. 블록 범위는 함수 범위의 하위 집합이므로 var에 적용되는 범위 제한은 let에도 적용됩니다.
(2) Let은 동일한 블록 범위에서 중복 선언을 허용하지 않습니다 .

var name;
var name;

let age;
let age; //SyntaxError; 标识符age已经声明过了

동일한 식별자가 중첩 된 경우 오류가보고되지 않습니다.

let age = 30;
console.log(age); //30
if (true) {
    
    
	let age = 26;
	console.log(age); //26
}

중복 된 선언보고는 let과 var를 혼합해도 영향을받지 않습니다. 이 두 키워드는 다른 유형의 변수를 선언하지 않으며 변수가 관련 범위에 어떻게 존재 하는지를 나타냅니다.

var name;
let name; //SyntaxError

let age;
var age; //SyntaxError

(3)
let과 var의 또 다른 중요한 차이점은 let에 의해 선언 된 변수가 범위에서 승격되지 않는 임시 데드 존 입니다 .

//name会被提升
console.log(name); //undefined
var name = 'Matt'//age不会被提升
console.log(age); //ReferenceError:age没有定义
let age = 26;

(4) 전역 선언
var 키워드와 달리 let을 사용하여 전역 범위에서 선언 된 변수는 window 객체의 속성이되지 않습니다 (var에 의해 선언 된 변수).

        var name = 'Matt';
        console.log(window.name); //'Matt'

        let age = 26;
        console.log(window.age); //undefined

for 루프
에서 Let 선언 let이 나타나기 전에 for 루프 에서 정의한 반복 변수는 루프 본문 외부로 침투합니다.

        for (var i = 0; i < 5; ++i) {
    
    
            //循环逻辑
        }
        console.log(i); //5

이 문제는 반복 변수의 범위가 for 루프 내부로 제한되어 있기 때문에 let으로 변경 한 후 사라졌습니다.

        for (let i = 0;i<5;++i){
    
    
            //循环逻辑
        }
        console.log(i); //ReferenceError: i没有定义

3.3 const

const의 동작은 기본적으로 let의 동작과 동일합니다. 유일하게 중요한 차이점은 변수를 선언하는 데 사용할 때 동시에 변수를 초기화해야하며 const 선언 된 변수를 수정하려고하면 런타임 에러.

const age = 26;
age = 36; //TypeError:给常量赋值

//const也不允许重复声明
const name = 'Matt';
const name = 'Nicholas'; //SyntaxError

//const声明的作用域也是块
const name = 'Matt';
if (true){
    
    
	const name = 'Nicholas';
}
console.log(name); //Matt

const 변수가 개체를 참조하는 경우이 개체의 내부 속성을 수정해도 const 제한을 위반하지 않습니다. 그러나 다른 참조 값에 재 할당 할 수 없습니다.

const person = {
    
    };
person.name = 'Matt';

3.4 문 스타일 및 모범 사례

(1) var를 사용하지 마십시오.
let과 const를 사용하면 대부분의 개발자는 더 이상 var가 필요하지 않다는 것을 알게 될 것입니다. let 및 const 만 사용하도록 제한하면 변수에 명확한 범위, 선언 위치 및 상수 값이 있기 때문에 코드 품질을 향상시키는 데 도움이됩니다.
(2) Const 먼저,
Let second.const 선언을 사용하면 브라우저가 런타임 동안 변수를 변경하지 않고 유지하도록 할 수 있으며 정적 코드 분석 도구가 불법 할당 작업을 미리 감지 할 수도 있습니다. 따라서 많은 개발자들은 변수를 먼저 선언 할 때 const를 사용해야한다고 생각하고 향후 변경 사항이있을 것임을 미리 알 때만 알려야합니다. 이를 통해 개발자는 특정 변수의 값이 절대로 변하지 않을 것이라는 확신을 가지고 추론하고 동시에 우발적 인 할당으로 인한 예기치 않은 동작을 신속하게 발견 할 수 있습니다.

요약하자면 :

어디 허락하다 const
범위 기능 범위 블록 범위 블록 범위
호이스트 여부 아니 아니
말씀을 반복 할 수 있습니까? 할 수있다 캔트 캔트

추천

출처blog.csdn.net/qq_43599049/article/details/112757665