什么是作用域
作用域决定了代码区块中变量和其他资源的可见性,**作用域就是一个独立的独立的地盘,让变量不外泄.暴露出去,作用域最大的用处就是隔离变量,不同作用域下变量名不会冲突
作用域可以分为
1.全局作用域,
2.私有作用域
3.es6块级作用域
全局作用域
当打开页面的时候,会提供一个供js代码执行的环境,全局作用域,会默认提供一个最大的window对象。
【全局变量】:在全局作用域中声明的变量就是全局变量,其中下面的a 和fn 就是全局变量
【全局变量和window关系】 在全局作用域中声明的变量:var、function(除去es6的),相当于给window上添加了属性,属性名就是变量名,属性值就是变量值
调用window 下的方法时,可以省去window不写:
window.alert("1");
alert("1");
window.Number("1");
Number("1");
var a=3; // a是全局变量
function fn(){ // fn 是全局变量
var num=3;
function f1(){
}
}
console.log(window.a);
console.log(window.fn);
所有未定义直接赋值的变量自动声明为拥有全局变量
所有window对象的属性拥有全局作用域
所有window对象拥有全局作用域
全局作用域的弊端:如果我们写了很多行代码,变量定义没有用函数包括,那么他们就全部在全局作用域中,这样会污染全局命名空间容易引起命名冲突
函数作用域(私有作用域)
【私有变量】:
- 形参