无法从Javascript中的函数访问父变量

时间:2016-01-27 20:29:12

标签: javascript scope requirejs

我有两个功能。我从另一个调用一个然后尝试访问函数的父级范围内的变量。这可以正常工作,如以下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?

2 个答案:

答案 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应该也可以工作,因为范围也是窗口,它只是在链接的示例中不起作用,因为它没有直接加载到窗口中。