作用域
作用域 在js中能够产生作用域的只有 window全局作用域和每一个function私有作用域
就是一个js代码执行的环境,window下的js变量 函数名等在任何地方都可以公用,但是function私有作用域,里面的这些东西只能在自己的家里(地盘里)使用,外面不能轻易的修改和拿到
只有函数执行的时候才会形成作用域
function的生命周期
function起源于window下的预解释,在这个阶段完成了声明和定义
一般情况下,当function执行的时候,首先对里面私有作用域重新的预解释,然后代码从上到下执行
一般情况下,当代码执行完成后,形成的私有作用域销毁(记住是形成的那个作用域销毁了,而开始开辟的那个新的内存地址是存在的)
但是也有特殊的情况,及一个函数中包含了另外的一个小的函数,这样这个函数就被新的小函数一直占用着,无法自动进行销毁,也就是作用域释放不掉了
在私有作用域中出现的变量,我们首先看一下在这个作用域下有没有预解释,如果有,那么变量就是自己私有的,如果没有,往他的上一级去找,直到找到window,如果window下也没有预解释,报错!!
function传递的参数,虽然不是被预解释,但是也是私有作用域里面的变量,此时私有作用域下的变量就是这个参数,所有形参都相当于私有作用域下var过
闭包
闭包就是函数运行的时候形成的那个私有作用域,所谓闭包就是讲执行环境封闭起来,保护里面的
this
第一人称我
只有function中有this
this是谁,和在哪定义和执行的function没半毛钱关系,只跟这个函数执行的时候是谁调用的有关,换句话说this就是函数执行的主体
方法名(); 我们只需要关注方法名之前有没有.,没有就是window,有的话是谁,那么this就是谁
给一个元素绑定事件,那么this就是这个元素
call apply 改变this指向