一个js闭包问题的解答
2015-03-24 12:48
204 查看
在详解js闭包这篇文章中,最后留了一个问题,代码在下:
可能第一次看到这个问题,以为是弹出My SF,可偏偏就不是,这是为什么呢?我们解析一下这个代码。
segmentFault是一个对象,定义了一个name属性和getNameFunc()方法,但要注意的是,segmentFault.getNameFunc()返回的是一个函数引用,所以最后一句代码可以分解为:
test是一个函数的引用,那么它的函数体就是getNameFunc()返回的内容
这样就很清晰了,此时,test()的作用域不再是segmentFault对象了,而是全局作用域,其this指的就是window,可以验证
所以this.name==window.name,在全局域中,name的值是trigkit4,so,最终弹出的就是trigkit4。
原文:http://www.ido321.com/1461.html
<script type="text/javascript"> var name = "trigkit4"; var segmentFault = { name : "My SF", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(segmentFault.getNameFunc()()); //弹出trigkit4 </script>
可能第一次看到这个问题,以为是弹出My SF,可偏偏就不是,这是为什么呢?我们解析一下这个代码。
segmentFault是一个对象,定义了一个name属性和getNameFunc()方法,但要注意的是,segmentFault.getNameFunc()返回的是一个函数引用,所以最后一句代码可以分解为:
var test = segmentFault.getNameFunc(); alert(test()); //结果一样
test是一个函数的引用,那么它的函数体就是getNameFunc()返回的内容
function test() { return this.name; }
这样就很清晰了,此时,test()的作用域不再是segmentFault对象了,而是全局作用域,其this指的就是window,可以验证
alert("test" in window); //弹出true
所以this.name==window.name,在全局域中,name的值是trigkit4,so,最终弹出的就是trigkit4。
原文:http://www.ido321.com/1461.html
相关文章推荐
- js闭包的一个小问题
- JS中关于call()方法的一个问题(转自百度知道,解答非常详细清楚)
- js的一个有意思的小题,闭包解决getElementByTagName的for循环绑定事件错误问题
- 非常不理解的一个问题。dudu看了请解答下!
- 一个对于js this关键字的问题
- 突然想起的一个简单而好玩的关于js和vbs的反射问题
- 一个有关DISTINCT的问题解答
- [疑问]作了一个用Js遍历树节点的函数,后来发现一个问题!
- 我学员的一个问题及其我对之的解答,关于lr返回值问题
- D3D中一个明暗处理的问题(D3DSHADE_FLAT) (问题,希望DX解答)
- 一个对于js this关键字的问题
- 对BBS中一个问题的解答 推荐
- 一个SERVLET与JS的问题
- 关于vb.net里面api Unicode/ANSI调用一个问题解答
- IE中一个值得关注的JS问题
- 我学员的一个问题及其我对之的解答,关于lr返回值问题
- 推荐一个 SQL2005 应用常见问题解答网站
- 一个solaris的内核问题的解答
- 推荐一个ABAP的基本问题解答的网站(很全的)
- 看到论坛上的一个对于js this关键字的问题,比较有代表性