Javascript

Sự khác nhau giữa ‘let’ và ‘var’ trong Javascript

letvar đều là hai từ khóa được sử dụng để khai báo biến trong Javascript.

Tuy nhiên điểm khác biệt của chúng là phạm vi ảnh hưởng của biến được khai báo bởi hai từ khóa này khác nhau:

var có ảnh hưởng đến toàn bộ function chứa nó trong khi let chỉ có ảnh hưởng đến khối lệnh chứa nó, khối lệnh này có thể nhỏ hơn khối lệnh của một function, vì một function có thể chứa nhiều khối lệnh trong đó.

– Biến được khai báo với từ khóa let không thể truy cập trước khi biến đó được khai báo trong khối lệnh chứa nó. Nếu bạn cố gắng truy cập vào biến này thì một ngoại lệ ReferenceError sẽ được quăng ra.

– Nếu như cả hai biến được khai báo bằng letvar không nằm trong bất kỳ khối lệnh nào thì lúc này chúng là những biến toàn cục. Tuy nhiên, biến được khai báo bằng let sẽ không được thêm vào như một thuộc tính của đối tượng toàn cục windows như biến được khai báo bằng var. Ví dụ:

let me = 'go'; // globally scoped
var i = 'able'; // globally scoped
console.log(window.me); // undefined
console.log(window.i); // 'able'

– Nếu như bạn sử dụng strict mode, var cho phép bạn khai báo lại một biến bạn đã khai báo trước đó trong khi let thì không. Ví dụ:

'use strict';
let me = 'foo';
let me = 'bar'; // SyntaxError: Identifier 'me' has already been declared
'use strict';
var me = 'foo';
var me = 'bar'; // No problem, `me` is replaced.

Demo: http://jsfiddle.net/tcCp5/182/
Nguồn: http://stackoverflow.com/a/11444416