JavaScript 函数无法读取到函数外的变量是什么原因?

2022-09-25 20:43:43 +08:00
 hblevins

为什么 createDomTree 无法获取到 test 这个变量? test 是定义在 createDomTree()之外的。

var app = function() {
    this.sidebar = {
    	test: 1,
        createDomTree: function() {
            console.log(test)
        }
    }
}

console.log(new app().sidebar); // {test: 1, createDomTree: ƒ}
new app().sidebar.createDomTree(); // Uncaught ReferenceError: test is not defined
1536 次点击
所在节点    JavaScript
5 条回复
moen
2022-09-25 21:12:41 +08:00
你这样写其实访问的是 globalThis.test ,而你期望的 test 在 createDomTree() 里是在 this 上
DrakeXiang
2022-09-25 21:30:21 +08:00
这个 test 不是变量。。是对象属性
`{ a: 1, b: a } ` 你觉得这么写可以么。。
wangtian2020
2022-09-26 08:41:19 +08:00
console.log(this.test)
thinkershare
2022-09-26 10:22:08 +08:00
因为 JavaScript 不会将 this 默认作为 scope, 如果想要访问函数的 this scope, 必须显示使用 this., 而且 this 是动态绑定的, 它总是 instance.method()前面的 instance( 已经绑定的函数除外)
monologue520
2022-09-26 16:06:38 +08:00
访问变量,首先应确定变量所在的上下文环境, 在没有确定上下文环境的情况下默认为 window,而 window 下并无「 test 」,所以会报错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/882847

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX