"use strict" 不适用于使用 Visual Studio 代码的 ES6
"use strict" does not work on ES6 using Visual Studio Code
在"use strict"
模式下,函数中的this
应该是[object Window]
而不是普通模式下调用函数的对象。但是当我试图证明概念时,它不起作用,我想知道 Visual Studio 代码中的 ES6 扩展有问题,但我不知道如何解决。有人能帮我吗? :|
这是我用来测试的代码 "use strict"
:
function name1() {
document.querySelectorAll("p")[0].innerHTML += this;
}
function name2() {
"use strict";
document.querySelectorAll("p")[0].innerHTML += this;
}
document.querySelectorAll("button")[0].addEventListener("click", name1);
document.querySelectorAll("button")[1].addEventListener("click", name2);
关于 this
,严格模式意味着调用 没有 任何调用上下文的函数 - 不在对象上的未绑定函数 - 将收到 this
undefined
而不是全局对象。
例如,您可以通过以下函数看到不同之处:
function fn() {
// use strict here to see the difference
console.log(this);
}
fn();
严格模式对 使用 调用上下文调用的函数的 this
没有影响。在这里,两个按钮都被调用 with a calling context of the button,因此无论是否使用严格模式,单击的按钮都是处理程序内部的结果 this
。
与 VSCode 无关 - 这就是任何地方的工作方式。
function name1() {
document.querySelectorAll("p")[0].innerHTML += this;
}
function name2() {
"use strict";
document.querySelectorAll("p")[0].innerHTML += this;
}
document.querySelectorAll("button")[0].addEventListener("click", name1);
document.querySelectorAll("button")[1].addEventListener("click", name2);
<p>p</p>
<button>b1</button>
<button>b2</button>
如果您想更改特定点击处理程序中的 this
,您可以
- 使用箭头函数代替
function
.bind
函数,例如 .addEventListener("click", name1.bind(desiredThis));
- 调用内部函数而不是传递它,例如
.addEventListener("click", () => obj.name1());
将调用obj
的this
在"use strict"
模式下,函数中的this
应该是[object Window]
而不是普通模式下调用函数的对象。但是当我试图证明概念时,它不起作用,我想知道 Visual Studio 代码中的 ES6 扩展有问题,但我不知道如何解决。有人能帮我吗? :|
这是我用来测试的代码 "use strict"
:
function name1() {
document.querySelectorAll("p")[0].innerHTML += this;
}
function name2() {
"use strict";
document.querySelectorAll("p")[0].innerHTML += this;
}
document.querySelectorAll("button")[0].addEventListener("click", name1);
document.querySelectorAll("button")[1].addEventListener("click", name2);
关于 this
,严格模式意味着调用 没有 任何调用上下文的函数 - 不在对象上的未绑定函数 - 将收到 this
undefined
而不是全局对象。
例如,您可以通过以下函数看到不同之处:
function fn() {
// use strict here to see the difference
console.log(this);
}
fn();
严格模式对 使用 调用上下文调用的函数的 this
没有影响。在这里,两个按钮都被调用 with a calling context of the button,因此无论是否使用严格模式,单击的按钮都是处理程序内部的结果 this
。
与 VSCode 无关 - 这就是任何地方的工作方式。
function name1() {
document.querySelectorAll("p")[0].innerHTML += this;
}
function name2() {
"use strict";
document.querySelectorAll("p")[0].innerHTML += this;
}
document.querySelectorAll("button")[0].addEventListener("click", name1);
document.querySelectorAll("button")[1].addEventListener("click", name2);
<p>p</p>
<button>b1</button>
<button>b2</button>
如果您想更改特定点击处理程序中的 this
,您可以
- 使用箭头函数代替
function
.bind
函数,例如.addEventListener("click", name1.bind(desiredThis));
- 调用内部函数而不是传递它,例如
.addEventListener("click", () => obj.name1());
将调用obj
的
this