作用域:指变量或者方法的作用范围
作用域链:程序在执行的时候系统会创建一个环境栈,首先压入栈底的是全局环境,同时也会给它创建一个变量对象,管理这个全局环境中的变量.当调用某个函数的时候,这个函数就会被压入环境栈,同时也会给它创建一个变量对象.系统会把这些变量对象链接起来,开头永远都是正在执行的函数,结尾是去全局环境.
一、变量的作用域
01 局部变量与全局变量
局部变量 声明在函数体内 作用域函数体内 形参
全局变量 声明在函数体外 作用域整个页面中 在函数体不加var关键字
在函数体中当局部变量与全局变量重名的时候,局部变量起作用;当想使用全局变量时,使用window.变量名
02 声明提升
当执行函数的时候,会先准备工作,会先将本函数体中声明的局部变量,提前声明了。
01 当执行script标签时,先把全局变量与单独定义的函数的声明给执行了,然后在去逐行的执行script标签之间的代码
02 当执行函数的时候,先把该函数中的局部变量与内部函数的声明给执行了,然后在区逐行执行函数体的代码
03 作用域链【面试重点】
作用链是有方向的,是从内到外的
二、匿名函数
01 什么是匿名函数
没有名字的函数
02 怎么调用匿名函数
03 匿名函数的作用
(1)模拟块级作用域
(2)解决团队开发命名冲突的问题
匿名函数+命名空间
三、闭包
01 什么闭包?
使用了外部函数的局部变量的内部函数,并且该内部函数被返回到外部函数的函数体外,那么这个内部函数就是闭包。
【判断是否是闭包】
(1) 内部函数;
(2)内部函数中使用了外部函数的局部变量;
(3)内部函数被返回到了外部函数体外。
【结论】闭包是链接函数内部与外部的桥梁。
留意定时器,有时候它也是闭包.
定时器被window调用了,它的值也就被传出去了.
02 闭包的优缺点
【优点】避免污染全局变量,可以让局部变量长时间的驻留在内存中。在函数体外可以使用函数体内的局部变量;
【缺点】变量长时间驻留在内存中,造成内存的浪费。所以使用闭包需谨慎。
03 闭包的使用
01 DOM操作--- 通过循环的方式给元素添加响应函数
02 使用定时器时,需要给定时器的函数传参,但是传参只有在调用函数的时候才可以传参。我们就可以把定时器的函数变成闭包,给他的外部函数传参。
03 封装常量
4 .在IE8下添加点击事件