作用域
- 全局作用域
- 私有作用域
- es6块级作用域
全局作用域
当打开页面的时候,会提供一个供js代码执行的环境全局作用域,会提供一个最大的window对象
- 全局变量:在全局作用域中声明的变量
- 判断一个对象有没有某个属性:
'属性名' in 对象名
返回true就是包含,返回false就是不包含
var obj={
name:li};
console.log("name" in obj);//true
全局变量和window的关系
- 在全局作用域下声明的变量,相当于给window添加了一个属性,属性名是变量名,属性值是变量值
- 在window身上的方法,我们可以直接省去window,如
window.alert(1);
alert(1);
//两者相等
带var与不带var的区别
- 都是在window添加对象
- 但是带var的先声明,到赋值代码行才赋值,不带var的是到代码行才声明赋值
- 带var的用
delete window.属性名
删不掉,不带var的可以删掉
console.log(a);//undefined
var a=12;
console.log(a);//12
console.log(b);//报错
b=13;
console.log(b);//如果不算报错不执行的话,13
"a" in window;//true
"b" in window;//true
delete window.a;//false删不掉
delete window.b;//true 删除了
//
function fn(x){
var n=2;
console.log(n);
m=9;
}
fn(1);//2
console.log(n);//报错
console.log(m);//9因为m不是var会向上查找,如果一直没有会给window
私有作用域
函数执行的时候形成的作用域就是私有的,保护里面的变量不受外界干扰
私有变量
:在私有作用域中声明的变量
就是私有变量,函数的形参
也是私有变量形参是在进入函数的时候先var一个形参
function fn(x){
//形参x也是私有变量
var m=3;//私有变量m
console.log(m);
console.log(x);
}
fn(2)