
javascript闭包中的作用域问题解读
在javascript中,闭包可以在一个私有变量范围内访问属于外部函数的变量,因此可以通过嵌套函数实现“延迟执行”或“数据保存”等目的。但有时候闭包中的作用域会带来一些问题。
var name = "The Window";var object = { name: "My Object", getNameFunc: function(){ return function(){ return this.name; }; }};alert(object.getNameFunc()());
问题:上例中,我们希望alert输出”my object”,但实际上却输出”the window”。这是为什么呢?
答案:
立即学习“Java免费学习笔记(深入)”;
匿名函数的this:匿名函数(即没有名字的函数)的this一般指向window。闭包的作用:在此例中,getnamefunc中的匿名函数的this指向window,但该函数通过闭包引用了getnamefunc的this,也就是object。作用域链:匿名函数执行时寻找that变量,首先会在自身的词法作用域中查找不到该变量,随后会沿着作用域链继续向上查找。
此时,that引用的是getnamefunc的this,也就是object,所以匿名函数中this.name实际上指向的是object.name,而不是window.name。
这个问题表明,在使用闭包时,需要注意匿名函数的作用域链,可能需要明确指定this的指向,才能获得预期的结果。
以上就是JavaScript闭包中匿名函数的`this`指向问题:为什么`object.getNameFunc()`输出“The Window”?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1495648.html
微信扫一扫
支付宝扫一扫