调用foo函数,返回obj.c。那么为什么会没有结果类?

发布于 2022-09-06 03:52:10 字数 694 浏览 22 评论 0

clipboard.png

'use strict';
var a = 20;
function foo () {
    var a = 1;
    var obj = {
        a: 10,
        c: this.a + 20,  
        fn: function () {
            return this.a;
        }
    }
    return obj.c;

}
console.log(foo());    // ?
console.log(window.foo());  // ?

是不是因为调用foo函数的时候,返回obj.c。而obj.c是this.a+20.
此时的this是指向undefined,(因为在严格模式下)所以没有结果吗?
如果没有用严格模式的话,这个this是指向window吗?怎么指向window有点模糊?
请各位指教.
Uncaught TypeError: Cannot read property 'a' of undefined at foo (test.html:18) at test.html:26

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

飘落散花 2022-09-13 03:52:28

嗯呐,严格模式下指向undefined。非严格模式下指向window,至于为什么指向window就是个老生常谈的问题了。

this的指向是运行时绑定。何为运行时,指的就是函数的调用点在哪里。很显然,foo()的调用点在全局,所以this便指向全局对象或者undefined

可供参考

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文