면접관은 실제로 const를 어떤 차이 같은 간단한 질문을하자, 자바 스크립트 VAR에 나에게 물었다?

这几天逛CSDN论坛,发现在一些前端模块发的问题大都是因为var、let和const搞不清楚导致的,今天我来浅析下,希望对看到这篇博客的童鞋有所帮助~


우리가 알고있는 것은 것을 ... (영작문 보편적 시작)입니다 VAR,하자 CONST : 자바 스크립트 방식을 선언 한 세 개의 변수가 있습니다.

디렉토리

수 (1)

(1) 정의 된 변수 VAR 수정할 수 후 초기화가 출력되지 않는 경우 undefined, 오류 없음.

var a;
console.log(a);   // undefined
// -----------------------------
console.log(a);     // undefined
var a = 1;

(2) VAR 블록 액세스 전반에 걸쳐 기능을 액세스 할 수없는 변수를 정의 하였다.

(3) 만 VAR 함수 범위는 블록 레벨 범위하지.

(4)가 VAR 함수의 범위 범위가 로컬 변수를 선언 할 수 있으며, 전역 변수 VAR을 선언 할 수있다. A의 函数内VAR 변수로 선언하고, 변수는 이 기능이 유효.

  • 글로벌 변수 : 변수 외부 함수 코드 파일의 전체 범위를 정의.
  • 로컬 변수 : 변수 함수에서 정의 된 현재의 범위의 내부 기능이다.
var a = 666;  
console.log("函数外var定义a:" + a); // 函数外var定义a:666

function cg(){
a = 888;
console.log("函数内var定义a:" + a);// 函数内var定义a:888
}

cg();
console.log("函数调用后var定义a为函数内部修改值:" + a);
// 函数调用后var定义a为函数内部修改值:888

(5)는 후자의 이전 값, 덮어 쓰기를 반복해서 정의 될 수있다.

var a = 1;
var a = 2;
console.log(a); // 2

하자 (2)

. (1)는 블록 레벨 범위가하자 내부 함수 정의 외부 기능에 영향을 사용하지하게된다.

let a = 666;  
console.log("函数外let 定义a:" + a); // 函数外let 定义a:666

function cg(){
let a = 888;
console.log("函数内let 定义a:" + a);// 函数内let 定义a:888
}

cg();
console.log("函数调用后let 定义a为函数内部修改值:" + a);
// 函数调用后let定义a为函数内部修改值:666

(2) 그렇지 않으면 오류가 발생하지, 사전에 어떤 변수 선언이 없습니다.

console.log(a);
let a = 1;

그림 삽입 설명 여기

전용 블록 영역에 액세스 할 수있다 (3)하도록 정의 변수가 아니라 크로스 블록 액세스를 할 수있다, 그것을 넘을 수 없다 함수 액세스.

    var c=11;
{
    let c=12;
    console.log(c);// 12
}
    console.log(c);// 11

(4) 다시 정의 할 수 없습니다, 그렇지 않으면 오류가됩니다.

let a = 1;
let a = 2;
console.log(a);

그림 삽입 설명 여기

3. CONST

(1) CONST 변수 정의 不可以수정 및 必须초기화.

const b = 2;// 正确
const b;   // 错误,必须初始化

(2) 일반적 CONST 상수를 선언하는 데 사용하고, 일정한 선언을 변경하도록 허용되지 않은, 그 것이다 只读属性에 따라서 필요한 声明的同时赋值.

(3) const를하고 보자는 중복 정의를 허용하지 않는, 블록 레벨 범위 만 블록 범위, 죽은 임시 존재, 사전에 어떤 변수 선언이없는 액세스 할 수 있습니다.

const b = 2; 
const b = 2; 
console.log(b);

그림 삽입 설명 여기


마지막으로, 우리는 사용할 수 있습니다 闭包, 글로벌 오염을 방지 볼 : 폐쇄 원리

게시 88 개 원래 기사 · 원 찬양 398 ·은 70000 +를 볼

추천

출처blog.csdn.net/weixin_42881768/article/details/105056122