题目描述var obj = { name:"zhangsan", sayName:function(){ console.info(this.name);
}
} var wfunc = obj.sayName;
obj.sayName();//zhangsan
wfunc();//undefined
var name = "lisi";
obj.sayName();//zhangsan
wfunc();//lisi题目来源及自己的思路主要是不太清楚后面3个答案的理由,希望大佬解释一下
2 回答
回首忆惘然
TA贡献1847条经验 获得超11个赞
我的理解是:
//先声明变量:
var obj,
var wfunc,
var name,
//在赋值
var obj={}
var var wfunc = obj.sayName;
obj.sayName();//这是取到name的值为zhangsan
wfunc()//此时的this指向window,window中有声明的name,但是未定义,故此时是undefined
name="lisi"//此时name值为lisi
obj.sayName()//this指向obj,故name的值为zhangsan
wfunc()//此时的this指向window,window中有声明的name,并且赋值为lisi
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
使用obj
调用的时候,sayName
的上下文对象是obj
。
重新赋值给wfunc
后再执行,上下文对象是window
,但是window
上没有name
属性;
另外,使用var
声明的变量在这里提升为全局变量,默认挂载在window
对象下,所以这时候上下文对象虽然还是window
,但是已经存在name
属性了。
添加回答
举报
0/150
提交
取消