1. 局部作用域与局部变量
局部作用域(函数作用域):作用于函数内的代码环境
局部变量:在函数内部定义的变量
2. 全局作用域与全局变量
全局作用域:作用于整个 script 标签内部或者一个独立的 js 文件
全局变量:在全局作用域下声明的变量叫做全局变量(在函数外部定义的变量)
小结:js没有块级作用域{}。在函数内部声明的变量是局部变量,作用于函数内部;在函数外部声明的变量是全局变量,作用于整个js文件
<script>
if (true) {
var num = 123;//这里num是全局变量
console.log(num); //123
}
console.log(num); //123
</script>
注意: 函数的形参是局部变量,但函数内部未用var声明的变量是全局变量。
<script>
var fn = function() {
var a = b = c = 3;
/*
这里相当于
var a=3;
b=3;
c=3;
a为局部变量
b和c直接赋值 没有var声明当全局变量看
*/
console.log(a);
console.log(b);
console.log(c);
}
fn();
// console.log(a);这里会报错
console.log(b);
console.log(c);
</script>
PS:var a=b=c=3中的变量b和c会成为全局变量,而var a=3,b=3,c=3中的a、b、c变量都为局部变量
3 块级作用域
ES6引入了let和const关键字,在大括号中使用let和const声明的变量存在于块级作用域中
{
// 块级作用域中的变量
let greeting = 'Hello World!';
var lang = 'English';
console.log(greeting); // Prints 'Hello World!'
}
// 变量 'English'
console.log(lang);
// 报错:Uncaught ReferenceError: greeting is not defined
console.log(greeting);