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
暂无评论内容