JavaScript关键字 let 与 var

在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域和全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。

例如:

{ 
  var i = 9;
} 
console.log(i);  // 9

ES6新增的let,可以声明块级作用域的变量。

{ 
  let i = 9;     // i变量只在 花括号内有效!!!
} 
console.log(i);  // Uncaught ReferenceError: i is not defined

注:
1.js中let和var定义变量的区别主要体现在作用域的不同。var定义的变量是全局变量或者函数变量。let定义的变量是块级的变量。也就是说,let只对它所在的最内侧块内有效,而var的范围至少是一个函数之内(即函数变量)。例如:

function myFunction(){
	while(1){
		let let1 = 2;
		var var1 = 2;
	}
	alert(let1); //不可访问
	alert(var1); //可以访问
}

2…而且,用let关键字定义的变量不能被let和var对同一变量进行声明,否则会报错;而使用var关键字定义的变量也只能使用var对同一变量进行再一次的声明。

使用var声明的变量与未使用let和var声明的变量(未声明的 JavaScript 变量)

如果把值赋给尚未声明的变量,该变量将被自动作为 window 的一个属性。
这条语句:

// 此处可调用 carName 变量
function myFunction() {
    phoneName= "honor9i";
    // 此处可调用 phoneName变量
}

将声明 window 的一个属性 phoneName。

非严格模式下给未声明变量赋值创建的全局变量,是全局对象的可配置属性,可以删除。

var var1 = 1; // 不可配置全局属性
var2 = 2; // 没有使用 var 声明,可配置全局属性
console.log(this.var1); // 控制台将输出 1
console.log(window.var1); // 1
delete var1; // 无法用delete删除用var 声明的变量var1
console.log(var1); //由于上一个语句并没与起任何作用,因此,此语句可以在控制台正常显示
delete var2; //由于var2并没有使用var关键字进行声明,因此可以用delete语句进行删除
console.log(delete var2); // true
console.log(var2); // 由于var2已经被delete删除,因此控制台把这条语句标红,报错,此时var2变量不存在

好啦,今天就先说到这里吧

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值