作用域:指一个变量的作用范围
- 全局作用域:
-
直接编写在script标签的js代码 -
在页面打开创建,在页面关闭时销毁
在全局作用域有一个全局对象window,代表一个浏览器窗口,浏览器创建我们直接可以使用。
- 创建的变量都会作为window对象的属性保存
- 创建的函数都会作为window对象的方法保存 2.函数作用域:
- 调用函数时创建函数作用域,函数执行完毕后,函数作用域销毁
- 没调用一次函数就会创建一个新的函数作用域,他们之间是独立的
- 在函数作用域可以访问到全局作用域的变量,在全局作用域无法访问到函数作用域的变量
1. var a = 10;
//a是全局变量,全局变量在任何地方都可以被访问
function fun() {
console.log('a=' + a);//函数作用域能打印外边全局作用域出a = 10
//也就是说里边函数作用域是可以访问到外边的全局作用域
}
fun()
//fun()函数调用
2. function fn() {
var b = 20;//在函数作用域创建一个变量
}
fn()
console.log('b=' + b); //然后在外边全局作用域打印,会报错
//也就是说在全局作用域是无法访问到函数作用域
- 当在函数作用域操做一个变量时,它会先在自身作用域寻找,如果有就直接使用;如果没有则向上一级作用域寻找,直到全局作用域没找到直接报错。
var a = 10;//全局作用域
function fun() {
var a = "我是fun函数a";//函数作用域
function fun1() {
console.log('a=' + a);//,两个a变量,谁近访问谁
}
fun1();
}
fun();
在函数作用域中有声明提前的特征
- 使用var关键字声明的变量,会在函数中所有代码执行之前被声明
function fun3() {
//相当于console.log(a)在执行之前上边位置有个隐形的var a,但未有赋值,因赋值在console.log(a)下边了,所以打印出undefined。
console.log(a);
var a = 35;
}
fun3();
- 在函数中,不适用var声明的变量都会成为全局变量
function fun3() {
a = 35;
}
fun3();
console.log(a);
- 定义形参就相当于在函数作用域中声明了变量
function fun3(e) {
//相当于var e=‘’
alert(e)
}
fun3();