var与 let的区别:
var:函数作用域;存在变量提升;可重复定义;声明的变量会作为window的属性。
let:块级作用域;不存在变量提升(有暂时性死区);不可重复定义;声明的变量不会作为window的属性。
块级作用域:即在{}花括号内的域,由{ }包括,比如if{}块、for(){}块。
函数作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体都是有定义的。
暂时性死区:在代码块中,在声明变量之前,该变量是不可用的。
JS中作用域有:全局作用域、函数作用域,是没有块作用域的。块级作用域是ES6中的。
var是js的,作用域是函数作用域的,let是ES6的,作用域是块级作用域的。
下面看下例子比较:
<script>
function test11(){
console.log('函数内声明前使用var变量',num);//undefined
var num=23;
// console.log('函数内声明前使用let变量',firstname);//报错:firstname is not defined
let firstname;
};
test11();
// console.log("函数内声明函数外使用var变量:",num);//报错:num is not defined
// console.log("函数内声明函数外使用let变量:",firstname);//报错:firstname is not defined
if(true) {
let c = 3;
if(true) {
console.log('c:',c);
}
console.log('块内声明前使用var',num);//undefined
var num=2;
}
console.log("块外使用var:",num);//2 (没赋值的话打印undefined)
console.log("块外使用let:",c);//报错:c is not defined
</script>
通过上述例子可见,var定义的变量是受到函数作用域限制的,不受if{}块作用域的限制。在函数内声明前使用var变量只是打印出undefined,而在函数外使用却报错is not defined。而在if{}块作用域内声明前使用和在块内声明后块外使用,也只是打印出undefined,并不会报错。说明var定义的变量的是否可见是受函数作用域限制的,但不受块作用域的限制。
再看let定义的变量,是受块作用域的限制的。let定义的变量不管是在函数内声明前使用,还是函数内声明后函数外使用,及块内声明块外使用都报错is not defined。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/137428.html