“Let”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
第25行: | 第25行: | ||
</script> | </script> | ||
</syntaxhighlight>上面代码运行就不会输出张三,依浏览器不同、浏览器版本不同,控制台要么报错、要么输出空。 | </syntaxhighlight>上面代码运行就不会输出张三,依浏览器不同、浏览器版本不同,控制台要么报错、要么输出空。 | ||
+ | |||
+ | 如果换成 var:<syntaxhighlight lang="javascript"> | ||
+ | <script> | ||
+ | { | ||
+ | var name = '张三'; | ||
+ | } | ||
+ | console.log(name); | ||
+ | </script> | ||
+ | </syntaxhighlight>就能正常输出了,这是因为 var 没有块级作用域,var 声明的属性会被添加到全局的属性 window 中,所以在外面就能读取到它, | ||
+ | |||
+ | 但 let 就不行了,因为是块级作用域,就只能在代码块里有效,所以在块外就读取不到了。 |
2024年7月31日 (三) 14:34的版本
let 有几个特点:
1.变量不能重复声明
<script>
let name = '张三';
let name = '李四';
</script>
运行会在控制台报错 这一点和 var 不同
<script>
var name = '张三';
var name = '李四';
</script>
上面使用 var 的代码就可以正常运行。
2.块级作用域 全局,函数,eval
let 声明的变量只在代码块里有效,出代码块就无效了,就读取不到了
<script>
{
let name = '张三';
}
console.log(name);
</script>
上面代码运行就不会输出张三,依浏览器不同、浏览器版本不同,控制台要么报错、要么输出空。 如果换成 var:
<script>
{
var name = '张三';
}
console.log(name);
</script>
就能正常输出了,这是因为 var 没有块级作用域,var 声明的属性会被添加到全局的属性 window 中,所以在外面就能读取到它,
但 let 就不行了,因为是块级作用域,就只能在代码块里有效,所以在块外就读取不到了。