this
function eat(){
console.log(this) //window
}
eat();
function fn(){
function b(){
console.log(this); //window
}
b()
}
fn()
function n(){
console.log(this) //window
}
~function (){
n()
}()
var obj={
fn:function (){
console.log(this)
}
}
obj.fn() //this: obj
var f=obj.fn;
f() //this: window
在js非严格模式下this:
1、自执行函数中的this一般都是window
var obj={
fn:(function(){
// this window
return function(){}
})()
}
2、给元素的某个事件绑定方法,当事件触发执行对应事件的时候,方法中的this一般都是元素本身
oBox.onclick=function(){
//this : oBox
}
3、还有一种方式能快速区分this:当方法执行的时候,看方法前边是否有 .
:有 .
, .
前边是谁this就是谁,没有 .
this一般就是window
var obj={
fn:function (){
console.log(this)
}
}
obj.fn() //this :obj
var f=obj.fn;
f() //this:window
在js严格模式下this:
如果执行主体不明确,this指向的是undefined(非严格模式下指向的是window)
"use strict"
function fn(){
console.log(this);
}
fn() //=>this:undefined
window.fn() //=> this:window
案例
function fn(){
//this:window
console.log(this)
}
document.body.onclick=function(){
//this:body
fn(); //执行前边没`.`this : window
}
//window全局作用域
//变量提升 var num; var obj;var fn;
//执行代码 num=1;
//开辟堆内存空间 aaaffff000
//存储键值对 num = 2; fn:自执行函数返回的结果
//自执行函数执行形成私有作用域A (栈内存A是不能被销毁的 因为被 obj.fn使用了)
//形参赋值 num = 1
//变量提升 没有
//代码执行
//this.num*=2 (this 是window) 全局num=2
//num+=2 (私有的形参) 私有的num =3
//return 一个函数(引用数据类型)
//开辟一个堆内存空间 AAAFFF111
//存储字符串
//return AAAFFF111
//fn =AAAFFF111
//把aaaffff000 赋值给 obj
//fn=obj.fn; fn = AAAFFF111
//fn() 找到AAAFFF111 形成私有作用域B
//形参和变量提升都没有
//this.num*=3; this为window 全局 num=6
//num++;私有作用域中没有向上找到私有作用域A的形参 私有的num =4
//打印 4
//作用域B销毁
//obj.fn() 还是找到AAAFFF111 形成私有作用域
//形参和变量提升都没有
//this.num*=3; this为obj obj num=6
//num++;私有作用域中没有向上找到私有作用域A的形参 私有的num =5
//打印 5
//作用域 销毁
// 全局 num =6
// obj num=6
//销毁堆内存
//fn=null;
//obj.fn=null
//obj=null
//4 5 6 6
var num=1;
var obj={
num:2,
fn:(function(num){
this.num*=2;
num+=2;
return function(){
this.num*=3;
num++; //主要在于 这个num是上级作用域的
console.log(num)
}
})(num)
}
var fn=obj.fn;
fn();
obj.fn();
console.log(num,obj.num)
异步 同步
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
- 找不到素材资源介绍文章里的示例图片?
- 对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
- 模板不会安装或需要功能定制以及二次开发?
- 请QQ联系我们
发表评论
还没有评论,快来抢沙发吧!