为了账号安全,请及时绑定邮箱和手机立即绑定

一个js的面试题

一个js的面试题

题目描述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

查看完整回答
反对 回复 2019-03-11
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

使用obj调用的时候,sayName的上下文对象是obj。 
重新赋值给wfunc后再执行,上下文对象是window,但是window上没有name属性;
另外,使用var声明的变量在这里提升为全局变量,默认挂载在window对象下,所以这时候上下文对象虽然还是window,但是已经存在name属性了。

查看完整回答
反对 回复 2019-03-11
  • 2 回答
  • 0 关注
  • 441 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信