我有两个功能。我从另一个调用一个然后尝试访问函数的父级范围内的变量。这可以正常工作,如以下javascript代码所示:
var value = "A";
function func1() {
console.log(this.value);
func2();
}
function func2() {
console.log(value);
}
问题1: 当包装在this之类的require.js中时,为什么func2中的值未定义?
问题2: 为什么我必须在func1中使用this.value?
答案 0 :(得分:2)
我认为你可能会混淆这两个价值观。
this.value
获取value
的{{1}}属性,其中this
由函数设置。 this
现在,您的func1()
未定义,因为您从未为其设置过值。
var value;
是this.value
this
正在尝试打印未定义的console.log(value)
值,因为您实际上从未将其设置为任何内容
答案 1 :(得分:1)
您还可以查看https://plnkr.co/edit/K7TSOypqKyBQEOqseGqP?p=preview以查看是否可以从func2访问var值。
我找到了一个解决方案:将setValue添加到problem.js:
function setValue(val) {
value = val;
}
并将其公之于众:
return {func1: func1, setValue:setValue};
并从initialize.js调用它:
problem.setValue("D");
现在问题中的每个函数(func1,func2)都可以使用variable
。请在我的更新链接中查看。
这取决于行var value
的范围。通常当你将这个js放在一个html中时,范围就是窗口,以及func1中的这个。
func 2应该也可以工作,因为范围也是窗口,它只是在链接的示例中不起作用,因为它没有直接加载到窗口中。