1.1作用域销毁,查找上级作用域,this,堆内存和栈内存
1.查找当前作用域的上级作用域:
要看当前作用域在哪里创建的,那么他的上级作用域就在哪里;
2.堆内存(引用数据类型开辟空间存储)--栈内存(用来执行代码作用域的环境)
堆内存:浏览器给引用类型开辟空间,用来存储东西;
(1)对象数据类型存储的键值对; 函数类型存储的字符串;
(2) 堆内存销毁:如果开辟的引用空间地址被占用,我们的堆内存将不被销毁,让占用引用地址的变量赋值为null,我们的堆内存就可以被释放;
栈内存:作用域用来执行代码的那个作用域环境;
(1)全局作用域:浏览器加载页面形成全局作用域;
(2) 私有作用域:函数执行形成私有作用域;
(3)全局作用域需要销毁需要关闭浏览器即可销毁;
(4)一般函数私有作用域执行完成之后进行销毁,当栈内存中的某一个东西(一般都是对象或者函数的堆内存)被栈内存以外的变量占用了,当前的这个栈内存就不能被销毁;不立即销毁,当代码执行完成后销毁;
3.this的定义,this在哪里定义没有任何关系,只看在哪里执行;
非严格模式下: 5中情况
1.自定义函数里面的this是window;
2.函数执行之前,看看前面有没有点,有点,前面是谁,this就是谁;
3.给元素的事件绑定方法,当事件触发,方法中的this就是元素;
4.在构造函数中,this就是这个构造函数的实例;
5.call,apply,bind(不兼容ie6-8)
(1) 函数.call([contentext],参数1,参数2) 传递的
让函数中的this变成第一个传递的contentext参数;函数执行,然后再传递实参给函数;
call默认不传递参数 this是window,null,undefined都是this都是window
fn.call() fn.call(null)
(2) 函数.appley([content],[参数1,参数2]) 语法传递参数是个数组,但是函数在执行的参数是一个个给函数传值;
apply执行的时候不写或者undefined或者null this都是window;
(3)bind语法:语法和call一样,
作用上区别:提现把函数中的this第一个参数的传值,它和call,apply的区别在于此时的函数并没有立即执行,bind也就是提前修改了函数的中this,我们把这种提前处理的思想,称之为“柯理化函数的思想”;
用处:改变函数的this,但是函数不会执行;
“”点“” 前面判断this的使用流程3步:
1)先确定 点 前面的this指向(this是谁);
2)先把this替换成指定对应的代码;
3)按照原型链查找的机制,一步步查找结果;
共同学习,写下你的评论
评论加载中...
作者其他优质文章