我是 JS 新手,目前正在使用 Eloquent JS Book 进行学习。第 10 章中有一个函数如下。 当我在具有实时服务器的本地主机上运行它时,两个日志的输出均为 1。然而使用时 书上给出的控制台或者我网上找到的其他沙盒js控制台,输出是2和1。如果你知道 为什么,请帮忙😀
const x = 1;
function evalAndReturnX(code) {
eval(code);
return x;
}
console.log(evalAndReturnX("var x = 2"));
// → 2
console.log(x);
// → 1
最佳答案
这些环境之间的差异为 strict mode 。仅在 sloppy 模式下,eval
才允许在函数作用域中声明新变量。
"use strict"; /*
^^^^^^^^^^^^^ */
const x = 1;
function evalAndReturnX(code) {
eval(code);
return x;
}
console.log(evalAndReturnX("var x = 2")); // → 1, as it should be
console.log(x); // → 1
如果您想要即使在严格模式下也能获得2
,我建议您这样做
var x;
eval("x = 2");
console.log(x);
或
console.log(eval("var x = 2" + "; x"))
关于javascript - 一个函数在不同的控制台中给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64617961/