作用域
作用域指一个变量的作用范围
在js中一共有两种作用域
1全局作用域
2函数作用域
直接编写在script标签中的js代码,都在全局作用域中
全局作用域在页面打开时创建,在页面关闭时销毁
在全局作用域中有一个全局对象window,我们可以直接使用它代表的是一个浏览器窗口,它由浏览器创建可以直接使用
在全局作用域中
创建的对象都会作为window对象的属性保存
变量会作为window对象的属性保存
var a = 10; console.log(window.a);
函数会作为window的方法去保存
function fun () { console.log("我是一个函数"); } window.fun() // window.alert("hallo")
变量提前声明
使用var关键字声明的变量,会在所有的代码执行之前被声明,
但是如果声明变量时不适用var关键字,则变量不会被声明提前
全局作用域中的变量都是全局变量在页面中的任意地方都可以获得
函数的声明提前
var a; console.log(a); a = 123;
使用函数声明形式创建的函数function函数(){}他会在所有代码执行之前就被创建
他会在所有代码执行之前就被创建,所以我们可以在函数声名前来调用
console.log(fun2); fun(); fun2(); // 函数声名会被提前创建 function fun () { console.log("我是一个函数"); } // 函数表达式,不会被提前创建 var fun2 = function() { console.log("我是一个函数"); }
函数作用域
调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁
每调用一次函数就会创建一个函数作用域,他们之间是互动独立的
在函数作用域中可以访问到全局作用域的变量,在函数作用域以外无法访问到函数作用域
当在函数作域中操作一个变量时,他会现在自身作用域中寻找,没有的话就向上一级寻找,如果找不到则会报错ReferenceError引用异常
此时函数中找到的时window的属性值
var a = 10; function fun() { var a = 50; console.log(window.a); } fun(); 定义形参就相当于在函数中声明了var a; var a=10; function fun (e) { console.log(e) } fun() 结果undefined