JS var let声明范围区别

var声明提升

1
2
console.log(name)  //土豆
var name = '土豆';

使用var声明的变量会自动提升到函数作用域的顶部

1
2
3
4
5
6
7
8
9
10
11
12
function foo(){
    console.log(name);
    var name = "土豆";
}
foo()  //undefined
//等价于
function foo(){
    var name;
    console.log(name);
    name = "土豆";
}
foo(); //undefined
1
2
console.log(name)  //ReferenceError name没有被定义
let name ="土豆";

而使用let定义的name不会被提升,报出ReferenceError的错误;

var可以重复声明同一个变量

1
2
3
4
var name = "番茄";
var name = "西瓜";
var name = "土豆";
console.log(name);//土豆

而使用let重复声明同一个变量会报错。

1
2
3
var name = "土豆";
let name = "土豆";
console.log(name);//'name' has already been declared
1
2
3
let name = "土豆";
var name = "土豆";
console.log(name);//Cannot redeclare block-scoped variable 'name'.

var全局声明

1
2
3
4
var name = "土豆";
console.log(window.name);//土豆
let age = "24";
console.log(window.age);  //undefined

使用var定义的变量会被挂载到window上,成为window对象的属性,而使用let不会。

作用域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if(true){
    var name = "土豆";
    console.log(name);
}
console.log(name);
//土豆
//土豆
if(true){
    let age = 24;
    console.log(age);
}
console.log(age);
//24
//undefined

使用var声明的范围是函数作用域,使用let声明的范围是块作用域。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容