一、全局作用域:1、直接编写在 script 标签之中的JS代码,
2、直接编写在外部的js文件中的代码
生命周期:在页面打开时创建,页面关闭时销毁
全局变量:在任何作用域内都是有效的
全局变量都是window对象下的属性。window对象下的所有的属性和方法都可以省略window
二、局部作用域:只有函数才能产生局部作用域
声明周期:调用的时候开始创建,函数调用完成后,生命周期结束
局部变量:只在当前的作用域内有效
<!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>作用域</title>
<script src="./b.js"></script>
</head>
<body>
</body>
<script>
/*
如何判断何时局部作用域:只需判断变量在全局中获取不到
*/
var a = 100;
console.log(window.a);
console.log(str);
console.log(a);
// 1、
while (true) {
var num1 = 1;
break;
}
console.log(num1);
console.log(window.num1);
// 2、
if (1) {
var num2 = 10;
}
console.log(num2);
// 3、
for (var i = 0; i < 1; i++) {
var num3 = 100;
}
console.log(num3);
// 4、
var key = 1;
switch (key) {
case 1:
var num4 = 1000;
break;
default:
break;
}
console.log(num4);
// 5、
do {
var num5 = 10000;
key++;
}
while (key <= 2);
console.log(num5);
// 6、
function fn1() {
var num6 = 0.1;
console.log(num6);
}
fn1();
// console.log(num6);
var x1 = 2.36;
console.log(window);
console.log(window.x1);
function fn2() {
console.log(x1);
// console.log(num6);
}
fn2()
/*
三、隐式的全局变量(重点,考试要考!)
1、函数中没有用var声明的变量
2、函数中没有用var声明的多个变量,用分号隔开的
3、函数中没有用var声明的多个变量,用赋值号链接的
*/
function func1() {
var x = 1,
y = 2,
z = 3; //x,y,z都是局部变量
var m = 1;
n = 2;
q = 3; //n,q是隐式全局变量
var e = f = g = 1; //f,g是隐式全局变量
}
func1();
console.log(x);
console.log(count); //-3
str1 = "嘿嘿";
console.log(str1);
// console.log(x);
// console.log(y);
// console.log(z);
// console.log(m);
console.log(n);
console.log(q);
// console.log(e);
console.log(f);
console.log(g);
/*
四、作用域链的查找规则:
先从当前的作用域内查找,如果有就返回
如果没有,再上一级作用域内查找,依次向上查找,
如果还没有,从全局作用域内查找。
全局中还没有就报错
*/
// var number1 = 0.111;
function f1() {
// var number1 = 0.222;
function fn2() {
// var number1 = 0.333;
console.log(number1);
}
fn2()
}
f1();
</script>
</html>