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
声明的范围是块作用域。
以上就是JS中var let声明范围区别详解的详细内容,更多关于JS var let声明范围区别的资料请关注IT俱乐部其它相关文章!