猿问

一个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个答案的理由,希望大佬解释一下


慕尼黑的夜晚无繁华
浏览 442回答 2
2回答

回首忆惘然

我的理解是://先声明变量:var obj,var wfunc,var name,//在赋值var obj={}var var wfunc = obj.sayName;obj.sayName();//这是取到name的值为zhangsanwfunc()//此时的this指向window,window中有声明的name,但是未定义,故此时是undefinedname="lisi"//此时name值为lisiobj.sayName()//this指向obj,故name的值为zhangsanwfunc()//此时的this指向window,window中有声明的name,并且赋值为lisi

肥皂起泡泡

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

相关分类

JavaScript
我要回答