JavaScript - 声明变量:const、var、let

1. var 变量

  1. 不存在块级作用域
  2. 存在“变量提升”现象:即变量可以在声明之前使用,值为underfined
  3. 可以重复声明
  4. 不存在暂时性死区
  5. 在浏览器环境下,var声明的全局变量会成为window对象的属性
var a = 1;
// var a;   // 不报错
console.log('函数外var定义a:' + a);   // 1

function change() {
	a = 4;
	console.log('函数内var定义a:' + a);   // 4
}
change();
console.log('函数调用后var定义a为函数内部修改值:' + a);   // 4

2. let 变量(ES6新增)

2.1 基本用法

用法类似于var,但声明的变量只能在let命令所在的代码块内有效。

{
    let a = 1;
    var b = 2;
}
console.log(a); // error
console.log(b); // 2

适用情况–for循环:

  • 使用let声明
for (let i = 0; i < 10; i++) {
    console.log(i); // 输出0-9十个数字
}
console.log(i); // error
  • 使用var声明
for (var i = 0; i < 10; i++) {
    console.log(i); // 输出0-9十个数字
}
console.log(i); // 输出10

这种情况下用来计数的循环变量i就会被泄露为全局变量。


2.2 不存在变量提升

  • 使用let的情况
// 在声明a之前,a并不存在,此时使用它会抛出错误
console.log(a); // error
let a = 2;
  • 使用var的情况
console.log(b); // underfined
var b = 2;

// 相当于
var b;
console.log(b); // underfined
b = 2;
console.log(b); // 2

2.3 暂时性死区

在代码块之内,使用let命令声明变量之前,该变量都是不可用的,称为“暂时性死区(TDZ
)”

if(true) {
	// TDZ开始
	a = 1; // error
	console.log(a); // error
	
	let a;// TDZ 结束
	console.log(a); // 1

	a = 2;
	console.log(a); // 2
}

不允许重复声明

// error
function() {
	let a = 1;
	var a = 2;
}

// error
function() {
	let a = 1;
	let a = 2;
}

// error
function(arg) {
	let arg;
}

// 不报错。外层代码块不受内层代码块的影响
function(arg) {
	{
		let arg;
	}
}
  • 允许在块级作用域内声明函数,该函数在块级作用域之外不可引用。
        // 在ES6中报错
        function f() {
            console.log('111');
        }
        (function() {
            if (fasle) {
                function f() {
                    console.log(222);
                }
            }
            f();
        }());

注意:

  • 避免在块级作用域内声明函数
  • ES6的块级作用域允许函数的规则只在使用大括号的情况下成立,如果没有大括号就会报错。

3. const 变量(ES6新增)

  1. const声明一个只读变量,一旦声明就不可以修改,而且必须初始化。
  2. 不能重复声明,作用域也为块级作用域
const b = 2;//正确
// const b;//错误,必须初始化
console.log('函数外const定义b:' + b);//有输出值
// b = 5;
// console.log('函数外修改const定义b:' + b);//无法输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值