經典面試題 var 和 let 的區別

2021-09-29 10:04:31 字數 1340 閱讀 9165

先看乙個**:

console.info( x );  // undefined。因為在後面用 var 定義了變數。

var x = 100;

console.info(x); // 100

以上**相當於:

var  x ;  // var 定義的變數被提公升到前面來定義。這個現場就是 「變數提公升」。

console.info( x ); // undefined。因為在後面用 var 定義了變數。

x = 100;

console.info(x); // 100

但是,如果直接使用乙個變數,會報錯。

console.info( y );  // 報錯。沒有定義變數 y,莫名其妙冒出來了乙個變數。
let 定義的變數,必須先定義才使用,否則會報錯。

console.info( x );  // 報錯

let x = 100;

console.info(x);

console.info(i); // 100。在{}外可以訪問 var 定義的變數。

這是因為在es6之前,我們都是用var來宣告變數,而且js只有函式作用域和全域性作用域,沒有塊級作用域,所以{}限定不了var宣告變數的訪問範圍。

es6新增的let,可以在 {} 內定義區域性變數。

內有效!!!

}console.info(i); // 報錯

for (let i = 0; i < 10; i++) 

console.info(i);

// referenceerror: i is not defined

for (var i = 0; i < 10; i++) 

console.info(i);

// 10 。 在 for 迴圈外,可以訪問迴圈變數 i

let a = 0;

let a = 'sss';

// uncaught syntaxerror: identifier 'a' has already been declared

var x = 100;

var x = 200 ;

console.info(x ); // 200

綜上,let 顯然更加的嚴謹,讓我們寫的**更安全。所以,我們推薦使用 let 定義變數。

let 和 var 引起的閉包面試題

首先閉包的形成的條件 1.有兩個函式 2.兩個函式是巢狀關係 3.內部的函式呼叫了內部函式的變數 其次變數的查詢規則 沿著作用域鏈逐層往外面查詢,直到找到全域性的,屬性找不到為undefind,變數為err 最重要的一句話 js函式在執行的時候在他們被定義的作用域中,而不是被執行的作 下面進入正題,...

let 和 var 的區別

1 作用域只侷限於當前 塊 if true console.log str console.log str1 str1 is not defined2 let宣告的作用於不會被提公升 console.log str var str 1 console.log str1 str1 is not def...

var和let的區別

在es6中新增了let命令,用來宣告變數。它的用法類似於var,但是所宣告的變數,只在let命令所在的 塊內有效。let let所在的區域會形成塊級作用域 let不存在變數提公升的情況 let會形成暫時性的死區 不可以在同一作用域下重複宣告變數 var 在es6之前 都是用var 宣告變數,只有函式...