<script>
var carName = "Volvo";
// 这里可以使用 carName 变量
function myFunction() {
// 这里也可以使用 carName 变量
console.log("函数里面调取="+carName);
}
myFunction();
// 这里不能使用 carName 变量
function myFunction1() {
var carName1 = "Volvo";
// 这里可以使用 carName 变量
}
myFunction1();
// 这里不能使用 carName1 变量
console.log(typeof(carName1));// undefined
//-----------------------------------------------------------------------
//JavaScript 块级作用域(Block Scope)
{
var x = 2;
}
//alert(x);
//在 ES6 之前,是没有块级作用域的概念的。
//ES6 可以使用 let 关键字来实现块级作用域。
//let 声明的变量只在 let 命令所在的代码块 {} 内有效,在 {} 之外不能访问。
{
let y = 44;
//alert(y);
}
//alert(y);//由于y 是使用let 定义的,所有在{} 中访问.
var x = 10;
// 这里输出 x 为 10
{
var x = 2;
// 这里输出 x 为 2
}
//alert("x="+x);
// 这里输出 x 为 2
//let 关键字就可以解决这个问题,因为它只在 let 命令所在的代码块 {} 内有效。
var x = 10;
// 这里输出 x 为 10
{
let x = 2;
// 这里输出 x 为 2
}
//alert(x)
// 这里输出 x 为 10
//--------------------------------------------------------------------------------------------
//循环作用域
var i = 5;
for (var i = 0; i < 10; i++) {
// 一些代码...
}
// 这里输出 i 为 10
let j = 5;
for (let j = 0; j < 10; j++) {
// 一些代码...
}
//alert(j);
// 这里输出 j 为 5
//在函数体外或代码块外使用 var 和 let 关键字声明的变量也有点类似。
//它们的作用域都是 全局的:
let a = 1;
function af(){
a = 3;
}
af();
alert(a); //3
//-----------------------------------------------------------------------
//重置变量
//使用 var 关键字声明的变量在任何地方都可以修改:
var x = 2;
// x 为 2
var x = 3;
// 现在 x 为 3
//1,在相同的作用域或块级作用域中,不能使用 let 关键字来重置 var 关键字声明的变量:
/*
var x = 2; // 合法
let x = 3; // 不合法
{
var x = 4; // 合法
let x = 5 // 不合法
}
*/
//2,在相同的作用域或块级作用域中,不能使用 let 关键字来重置 let 关键字声明的变量:
/*
let x = 2; // 合法
let x = 3; // 不合法
{
let x = 4; // 合法
let x = 5; // 不合法
}
*/
//3 在相同的作用域或块级作用域中,不能使用 var 关键字来重置 let 关键字声明的变量:
/*
let x = 2; // 合法
var x = 3; // 不合法
{
let x = 4; // 合法
var x = 5; // 不合法
}
*/
//4 let 关键字在不同作用域,或不同块级作用域中是可以重新声明赋值的:
/*
let x = 2; // 合法
{
let x = 3; // 合法
}
{
let x = 4; // 合法
}
*/
//--------------------------------------------------------------------------------
//const 关键字
//const 用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改:
/*
const定义常量与使用let 定义的变量相似:
二者都是块级作用域
都不能和它所在作用域内的其他变量或函数拥有相同的名称
两者还有以下两点区别:
const声明的常量必须初始化,而let声明的变量不用
const 定义常量的值不能通过再赋值修改,也不能再次声明。而 let 定义的变量值可以修改。
*/
</script>