JavaScript基础与进阶

let

基本用法

1.Let声明的变量仅在其代码块内有效。

{
	let a=10;
	var b=1;
}
console.log(b);
console.log(a);

2.for循环在设置循环变量的部分是一个父作用域,循环体内部又是一个独立的子作用域。
两层作用域不会有影响,函数内部可声明自己的。

for(let i=0;i<3;i++){
	let i='abc’;
	console.log(i);
}

变量提升

变量提升:var声明的变量无论其实际声明位置在何处,都会被是为声明于所在函数(或全局)的顶部。

function getValue(c){
if(c){
var value='blue';
return value;
}else{
	return null;
}
}

上面代码会被JS引擎调整为:

function getValue(c){
var value;
if(c){
value='blue';
return value;
}else{
	return null;
}
}

暂时性死区

在代码块内,使用let命令声明变量之前,该变量都是不可用的,这个区域被称为“暂时性死区”。
let没有变量提升,必须先声明后使用。

var temp=123;
if(true){
temp='abc';
let temp;
}

上面代码的区块中存在let命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域。

作用域

1.变量或函数在起作用的区域。
2.JavaScript采用的是“词法作用域”(静态作用域),即在变量作用域取决于变量所在的代码区域。

全局作用域

1.在所有函数之外定义的变量拥有全局作用域,该变量为全局变量。
2.全局变量可以在当前页面中任何JavaScript代码中访问。
3.var声明的变量会附着在window对象上,而let不会。

函数作用域

在函数中声明的变量(包括函数参数)指定在其所声明的函数内被访问。

块作用域

由{ }界定的代码区域,let声明的变量具备可访问块作用域。
IIFE:可以避免从块内部进行变量提升,允许公众访问方法,同时保留函数中定义的变量的私密性。

块级作用域的出现使得ES5中惯用的IIFE(立即执行匿名函数)不再必要了。

作用域链

每一段JavaScript代码(全局代码或函数)都有一个与之关联的作用域链(scope chain)。
当JavaScript查找变量x的时候( 变量解析,variable resolution),会从当前作用域开始跟随作用域链向上查找,直到找到x变量的声明,若到达全局作用域中仍未找到,则抛出一个引用错误(ReferenceError)异常。

const命令

基本用法

声明一个只读的常量,一旦声明,其值不能改变且必须立即初始化。

本质

当常量保存的不是一个原始值,而是一个地址的时候,该常量所引用的对象是可以更改成员的,只是不能更改该常量保存的地址。
只要后面不会更改的数据都用const声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值