作用域

作用域
作用域指一个变量的作用范围
在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
原文地址:https://www.cnblogs.com/niuyaomin/p/11986692.html