简介:
JavaScript中,常用var,let和const声明一个变量,这三个标识符都是JavaScript的关键字,它们的表现并不总是一样。
let 声明的变量只在 let 命令所在的代码块内有效。
const 声明一个只读的常量,一旦声明,常量的值就不能改变。
1. var,let和const在使用中的不同表现结果:
(1)先使用,后声明:
console.log(a); // undefined ==> a已声明还没赋值【var a】,默认得到undefined值
var a = 100;
console.log(b); // Uncaught ReferenceError: b is not defined ==> 报错:找不到b这个变量
let b = 10;
console.log(c); // Uncaught ReferenceError: c is not defined ==> 报错:找不到c这个变量
const c = 10;
(2)在块作用域的表现:
//在块作用域中的表现
{
var a = 100;
let b = 10;
}
console.log(a); // 100
console.log(b) // 报错:b is not defined ===> 找不到b这个变量
if(true){
var a = 100;
const c = 1;
}
console.log(a); // 100
console.log(c) // 报错:c is not defined ===> 找不到c这个变量
(3)在html的window对象上的表现:
var声明的变量可以被window引用;
let和const的无法被window引用,报错“undefined”。
var a = 'a';
console.log(a,window.a) //abc abc
let b = 'b';
console.log(b,window.b) //b undefined
const c = 123;
console.log(c,window.c) //123 undefined
2.const的特别说明:
必须在声明的同时进行赋值,而且不能设为null;
const是声明一个常量,所以,声明后,不能被修改;
如果声明的是复合类型数据,可以修改其属性
例子:
const a = 'abc';
const list = [];
list[2] = 'abc';
console.log(list); // [empty × 2, "abc"]
const obj = {a:100};
obj.a = 'abc';
console.log(obj); // {a:'abc'}
3. JavaScript 作用域:
.如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。
.你的全局变量,或者函数,可以覆盖 window 对象的变量或者函数。
.局部变量,包括 window 对象可以覆盖全局变量和函数。
常量,变量,作用域,从C语言开始就一直在被强调。