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;
的第一个代码与第二个代码的工作方式不同的原因。
答案 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'关键字。这只是指非静态全局变量。