提升
开始之前我们先聊下js中的提升
console.log(tmp)
var tmp = 1 // undefined
为什么会打印undefined,我们来分析下,下面引用《你不知道的JavaScript上劵》一段
也就是你看到并不是你看到的那样,声明(=号左边)被提升到了最上面, 变量被声明时会初始化赋值undefined
var tmp
console.log(tmp) // undefined
tmp = 1
函数中变量也是一样的, 声明会被提升到当前函数作用域的最上面
// 你看到的
function test() {
console.log(tmp) // undefined
var tmp = 2
}
// 引擎看到
function test() {
var tmp
console.log(tmp) // undefined
tmp = 2
}
let
没有提升
let声明变量,不存在提升
console.log(a); // 报错ReferenceError
let a = 2;
临时死区
临时死区(Temporal Dead Zone),简写为 TDZ
不允许重复声明变量
let不允许在相同作用域内,重复声明同一个变量
function func(arg) {
let arg; // 报错
}
let全局变量不会挂在顶层对象下面
var声明的全局变量会挂在顶层对象下面,而let不会挂在顶层对象下面
var a = 1;
// 如果在 Node环境,可以写成 global.a
// 或者采用通用方法,写成 this.a
window.a // 1
let b = 1;
window.b // undefined
块级作用域
es6之前JavaScript中只有全局作用域和函数作用域,let声明变量可以实现块级作用域,“{}”之间就是一个块作用域
function test() {
for(var i = 0; i <= 10; i++) {
}
console.log(i) //11, i是当前函数作用域下面的
}
function test1() {
for(let i = 0; i <= 10; i++) {
}
console.log(i) //报错ReferenceError
}
const
- const基本和let一样的特性,不过const声明的变量不能被修改(也就是一个常量)针对值,如果是对象或者数组内的属性是可以修改,基本数据类型和引用数据类型(地址值)的值不能被修改
- 一旦声明,必须马上赋值
let p; var p1; // 不报错
const p3 = '马上赋值'
const p3; // 报错 没有赋值
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!