发现一个很奇怪的现象,谁能解答

qq_36641210 2017-03-13 05:28:15
先运行这行代码
var name="赵四";
var obj={
hs:function(){
return function(){
return this.name;
}
}
}
alert(obj.hs()()) //打印出赵四
再运行这行代码
var obj={
hs:function(){
return function(){
return this.name;
}
}
}
alert(obj.hs()()) //这里还是能打印出赵四

然而如果把var name改成var mz或者其他的就行不通。name有什么特殊
...全文
237 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_14875589 2017-03-15
  • 打赏
  • 举报
回复
引用 10 楼 qq_14875589 的回复:
这是闭包的问题,匿名函数中套了一个匿名函数,而且内层匿名函数被外部引用了,this就是指向外部的全局对象,你这里的爱我不对象就是window,所以结果是window.name
修正:你这里的外部对象就是window
qq_14875589 2017-03-15
  • 打赏
  • 举报
回复
这是闭包的问题,匿名函数中套了一个匿名函数,而且内层匿名函数被外部引用了,this就是指向外部的全局对象,你这里的爱我不对象就是window,所以结果是window.name
zpjshiwo77 2017-03-14
  • 打赏
  • 举报
回复
引用 8 楼 zpjshiwo77 的回复:
关键在于理解this作用域的函数: http://www.cnblogs.com/wangfupeng1988/p/3988422.html
手滑打错字,“关键在于理解this作用域:”,别被后面三个字误导
zpjshiwo77 2017-03-14
  • 打赏
  • 举报
回复
关键在于理解this作用域的函数: http://www.cnblogs.com/wangfupeng1988/p/3988422.html
xiaojunjor 2017-03-14
  • 打赏
  • 举报
回复
引用 3 楼 qq_36641210 的回复:
[quote=引用 1 楼 xiaojunjor 的回复:] 没看懂啥意思。。我跑了一下都可以
怎么可能,难度就我这样吗? [/quote] 你是页面刷新了重新跑的,我是在控制台跑的。。没刷新所以都可以
似梦飞花 2017-03-13
  • 打赏
  • 举报
回复
this指向了window 即你最外边的name
functionsub 2017-03-13
  • 打赏
  • 举报
回复
。。。你还是没搞清楚问题的关键 问题的关键在于你的hs返回的函数是一个匿名函数,匿名函数执行的时候,他的作用域是window,所以this.name就指向了你上面定义的name就是2楼说的那样。
qq_36641210 2017-03-13
  • 打赏
  • 举报
回复
引用 2 楼 jslang 的回复:
全局变量name就等于 window.name ,而且window.name是一个固有的属性,也就是浏览器窗口的名字,这个属性有个特点,在设置了值之后,刷新页面时候不会消失,只有关闭浏览器窗口才会消失。
原来如此,谢谢大神 这玩意在我学闭包的时候,坑了我一把
qq_36641210 2017-03-13
  • 打赏
  • 举报
回复
引用 1 楼 xiaojunjor 的回复:
没看懂啥意思。。我跑了一下都可以

怎么可能,难度就我这样吗?
天际的海浪 2017-03-13
  • 打赏
  • 举报
回复
全局变量name就等于 window.name ,而且window.name是一个固有的属性,也就是浏览器窗口的名字,这个属性有个特点,在设置了值之后,刷新页面时候不会消失,只有关闭浏览器窗口才会消失。
xiaojunjor 2017-03-13
  • 打赏
  • 举报
回复
没看懂啥意思。。我跑了一下都可以

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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