关于JS中的This的一个面试题,求大神解释!!!!

X月亮代表我的心 2015-12-03 10:21:17
function a(xx){this.x=xx;return this};
var x=a(5);var y=a(6);
console.log(x.x);
console.log(y.x);
...全文
1325 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯狂大嘴 2018-01-07
  • 打赏
  • 举报
回复
function a(xx){this.x=xx;return this}; var x=a(5);//此时 x=window,y=undefined var y=a(6);//此时 x=6,y=window console.log(x.x);//实际是6.x,就是undefined console.log(y.x);//实际是window.x,就是6; 要注意的是:var x跟var y是连续执行完后才执行输出的!
飞侠 2016-10-25
  • 打赏
  • 举报
回复
看一下this头脑风暴的测试题:http://www.68kejian.com/app/detail.html?id=80&&c=471
拾•安逸 2016-06-29
  • 打赏
  • 举报
回复
function a(xx){this.x=xx;return this}; var x=a(5);var y=a(6); console.log(x.x); console.log(y.x); 分析如下: 开始执行代码时,会创建一个全局对象window js执行代码过程可以分: 词法分析期和执行期 第一步词法分析包括:形参分析、实参分析、变量声明分析、函数声明分析。分析出的结果作为对象的属性和方法 window对象在词法分析期 得到的属性和方法有: window.a=function(xx){this.x=xx;return this} window.x=undefined window.y=undefined 代码执行期: /*先执行 window.a(5) =》window.a=function(xx){this.x=xx;return this} 函数中的this指代对象是window. 得出window.x=5, 此时,全局域中window.x=undefined 变成 window.x=5 然后 return window 赋值给 x 即:x=window , 最终这x=window这句赋值语句 把 window.x=5改成 window.x=window */ x=a(5); /*先执行 window.a(6) =》window.a=function(xx){this.x=xx;return this} 函数中的this指代对象是window. 得出window.x=6, 把全局域中window.x=window变成 window.x=6 然后 return window 赋值给 y 即:y=window y=window 赋值语句把window.y=undefined 变成了 window.y=window */ y=a(6); //综上所述:window.x=6 window.y=window console.log(x.x); //输出x.x 相当于:(window.x).x=6.x------->window对象中没有 6.x属性 则输出undefined console.log(y.x); //输出 y.x 相当于:(window.y).x=window.x------------>window对象中有window.x这个属性 则输出6
  • 打赏
  • 举报
回复
引用 2楼xxxyyyzzz0 的回复:
结果是undefind,6
理解不了!
xxxyyyzzz0 2015-12-04
  • 打赏
  • 举报
回复
直接调用函数,this表示全局对象
xxxyyyzzz0 2015-12-04
  • 打赏
  • 举报
回复
结果是undefind,6
夏天的蚂蚱 2015-12-04
  • 打赏
  • 举报
回复
定义的a方法,直接调用this对象指向的是window全局变量。在x=a(5)时,this.x就是window.x得到的是5,后来x接到了返回值是window.这一点你可以把y=a(6)注释掉执行看到!然后再调用y=a(6),这时候this.x把之前的x改写成6,成了一个数值型的变量了。这时候y接到了返回的window,x.x不存在,y.x就是被改写的那个6了!
xxxyyyzzz0 2015-12-04
  • 打赏
  • 举报
回复
引用 3 楼 XiaoKangmemeda 的回复:
引用 2楼xxxyyyzzz0 的回复:
结果是undefind,6
理解不了!
用Firebug调试一下你就知道每一步是干什么了。

662

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧