为什么`this`在这种情况下很重要?

时间:2020-06-17 15:17:49

标签: javascript

scanf("%hhu",&x);
...
scanf("%hhu",&y);

"org.apache.commons" % "commons-email" % "1.5"

这些片段之间的唯一区别是以下行:

const library = (function () { let myLibrary = [1, 2]; function get() { return this.myLibrary; } return { myLibrary, get } })(); console.log(library.get()); // [1, 2] library.myLibrary = [0]; console.log(library.get()); // [0]const library = (function () { let myLibrary = [1, 2]; function get() { return myLibrary; } return { myLibrary, get } })(); console.log(library.get()); // [1, 2] library.myLibrary = [0]; console.log(library.get()); // [1, 2]

第一个是在工厂函数内部对数组进行突变,但是第二个没有。但是我不明白为什么使用return this.myLibrary;的第一个代码与第二个代码的工作方式不同的原因。

2 个答案:

答案 0 :(得分:1)

在第一种情况下,get函数将返回由匿名函数创建并返回的对象上的myLibrary 属性的值。

在第二种情况下,get函数将返回其关闭的myLibrary 变量的值。该变量与对象上的属性完全无关,因此分配该变量不会更改get返回的变量。为了说明这一点,这是您的第二个示例,其中的myLibrary属性与返回的对象无关:

const library = (function () {
  let myLibrary = [1, 2];

  function get() {
    return myLibrary;
  }

  return { get } // <<================ No `myLibrary` property at all
})();

console.log(library.get()); // [1, 2] <== You still get the value, even though
                            //            the property doesn't exist

library.myLibrary = [0];           // <== Creates a property, which has nothing
                                   //     to do with what `get` returns

console.log(library.get()); // [1, 2] <== Since the property is unrelated,
                            //            there's no difference here

如果您这样做:

console.log(library.myLibrary);

最后,您将得到[0]创建的属性的值library.myLibrary = [0];

答案 1 :(得分:-3)

如果您的函数不是静态的并且myLibrary是全局的,那么您需要使用'this'关键字。这只是指非静态全局变量。