作用域

作用域的销毁

全局作用域和私有作用域;
全局作用域的销毁: 只有当关闭页面时,或关闭浏览器时,全局作用域才会销毁;不销毁的作用域;
私有作用域的销毁:
函数执行:形成一个私有作用域;提供代码运行环境;存储基本数据类型值;
闭包:
1.保护了里面的私有不受外界的干扰;
2.存储值;
function fn() {
var num = 10;
}
fn();
fn();
console.log(num);

 

立即销毁:

一般情况下,函数执行完成之后,当前的作用域会立即销毁;
函数每执行都会开辟一个新的私有作用域;并且新的私有作用域跟之前的作用域没有关系;是两个不同的栈内存;
函数每执行一次,都会重新开辟一个新的栈内存

不销毁的作用域:

1、函数执行return出一个引用数据类型的值

2、函数执行return出的引用数据类型值并且被外界接收;【被占用】

function fn() {
var t = 10;
return function () {
console.log(t)
}
};
var f = fn();
f()
f()

不立即的销毁:

需要等待里面的小函数执行完成之后,那么外层作用域才会随着销毁;
function fn() {
var t = 10;
return function () {
console.log(t)
}
};
fn()();

全局作用域:

当打开浏览器时,浏览器会形成一个全局的作用域,给当前代码提供运行环境的;并且存储基本数据类型值
基本数据类型存储到栈内存中,全局作用域是最大的一个栈内存;
 
全局对象 window : 是全局下最大的一个对象;内置属性
console.log(typeof window);//对象;
 
DOM的回流和重绘
浏览器的渲染机制:先形成DOM树,在形成css树,最后两个树形成render树
 
全局作用域: 当打开页面时,形成一个全局的作用域;
私有作用域: 函数每执行一次,都会形成一个新的私有作用域;
作用域: 1.给代码提供运行环境 2.存储基本数据类型值;
 
全局作用域 
1.会给window新增一个键值对
2.全局下定义的函数相当于给window新增键值对,属性名是函数名,属性值是整个函数
 
全局变量:全局作用域下声明的变量就是全局变量

私有作用域:

定义:函数执行的时候会形成一个私有的作用域
私有变量:
1、在函数体中被var,被function过,就是一个私有变量
2、函数的形参也是私有变量
 
函数执行的过程
1、首先形成一个私有作用域,开辟一个栈内存
2、形参赋值
3、变量提成
4、代码从上到下运行
5、作用域是否销毁
 
私有变量:私有作用域下声明的变量叫做私有变量+形参

块级作用域:

定义:除了私有作用域和对象以外{}包裹的作用域都是 块级的作用域
函数执行首先会形成一个私有的作用域;
函数体中的变量发生在私有作用域形成之后
 

 

作用域链

函数执行形成一个私有的作用域(保护私有变量),进入到私有作用域中,首先变量提升(声明过的变量是私有的)接下来代码执行
1、执行的时候遇到一个变量,如果这个变量是私有的,那么按照私有处理即可
function fn(){
//=>[私有作用域]
//变量提升:var a;(私有变量)
console.log(a);//->undefined
var a=12;
console.log(a);//->12
}
fn();
console.log(a);//=>Uncaught ReferenceError: a is not defined闭包机制:私有作用域保护里面的私有变量不受外界的干扰
2、在当前作用域下找到一个变量,优先找它的私有变量,如果私有变量没有,去它上级【要看当前作用域下在哪开辟的,在哪开辟的,上级就是谁】找,如果上级还没有,一直找到window全局作用域为止,全局还没有会报错。我们把这种查找机制叫做作用域链
1)如果上级作用域有这个变量,我们当前操作的都是上级作用域中的变量(假如我们在当前作用域把值改了,相当于把上级作用域中的这个值给修改了)
2)如果上级作用域中没有这个变量(找到window也没有):
变量=值 : 相当于给window设置了一个属性以后操作window下就有了
alert(变量):想要输出这个变量,但是此时是没有的,所以会报错
//console.log(a);//Uncaught ReferenceError: a is not defined
console.log(window.a);//=>undefined
a=12;//<=> window.a=12
console.log(a);//=>12 <=>window.a
console.log(window.a);//=>12 

 

posted @ 2018-08-11 15:43  席超  阅读(138)  评论(0编辑  收藏  举报