JavaScript let
1. 全局作用域
全局(在函数之外)声明的变量拥有全局作用域。
var name1 = "yao";//全局作用域
//此处可以使用name1
function myFunction(){
//此处也可以使用name1
}
全局变量可以在JavaScript程序中的任何位置访问。
2. 函数作用域
局部(函数内)声明的变量拥有函数作用域。
//这里不可以使用carName
function myFunction(){
var carName = 'porsche';//函数作用域
//这里可以使用carName
}
//这里不可以使用carName
局部变量只能在它们被声明的函数内访问。
3. JavaScript 块作用域
通过var
关键词声明的变量没有作用域。
在块{ }内声明的变量可以从块之外进行访问。
{
var x = 10;
}
//此处可以使用 x
可以通过let
关键词声明拥有块作用域的变量。
在块{ }内声明的变量无法从块外访问。
{
let x = 10;
}
//此处不可以使用 x
4. 重新声明变量
使用var
关键字重新声明变量会带来问题。
在块中重新声明变量也将重新声明块外的变量:
var name = 'yao';
{
var name = 'li';
}
//此处 name 为 li
使用let
关键字重新声明变量
在块中重新声明变量不会重新声明块外的变量:
var name = 'yao';
{
let name = 'li';
}
//此处 name 为 yao
5. 循环作用域
在循环中使用var
:
var i = 7;
for (var i = 0; i < 10; i++){
//一些代码
}
//此处 i 为 7
在循环中使用let
:
let i = 7;
for (let i = 0; i < 10; i++){
//一些代码
}
//此处 i 为 10
在例子中,在循环中使用的变量使用var
重新声明了循环之外的变量。
在循环中使用的变量使用let
并没有重新声明循环外的变量。
如果在循环中用let
声明了变量 i ,那么只有在循环内,变量 i 才是可见的
6. HTML 中的全局变量
在 HTML 中,全局作用域是 window 对象
通过var
关键词定义的全局变量属于 window 对象:
var carName = 'poesche';
//此处的代码可使用 window.carName
通过let
关键词定义的全局变量不属于 window 对象:
let carName = 'Audi';
//此处的代码不可使用 window.carName
7. 重新声明
允许在程序的任何位置使用var
重新声明 JavaScript 变量:
var x = 10;
//现在 x 为 10
var x = 20;
//现在 x 为 20
在相同的作用域,或在相同的块中,不允许通过let
重新声明一个var
变量
var x = 10;//允许
let x = 20;//不允许
{
var x = 10;//允许
let y = 20;//不允许
}
在相同的作用域,或在相同的块中,不允许通过let
重新声明一个let
变量
let x = 10;//允许
let x = 20;//不允许
{
let x = 10;//允许
let x = 20;//不允许
}
在相同的作用域,或在相同的块中,不允许通过var
重新声明一个let
变量
let x = 10;//允许
var x = 20;//不允许
{
let x = 10;//允许
var x = 20;//不允许
}
在不同的作用域或块中,允许通过let
重新声明变量、
let x = 20;//允许
{
let x = 7;//允许
}
{
let x = 80;//允许
}
8. 提升
通过var
声明的变量会提升(Hoisting)到顶端,可以在声明变量之前就使用它
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JavaScript 提升</title>
</head>
<body>
<h1>JavaScript 提升</h1>
<p>使用<b>var</b>,可以在声明之前使用变量:</p>
<p id="demo"></p>//Audi
<script>
carName = 'Audi';
document.getElementById('demo').innerHTML = carName;
var carName;
</script>
</body>
</html>
标签:10,变量,作用域,JavaScript,let,var,声明 From: https://www.cnblogs.com/YlMXY/p/16651758.html通过
let
定义的变量不会被提升到顶端在声明
let
变量之前就使用它会导致ReferenceError变量从块的开头一直处于"暂时死区",直到声明为止