javascript - 一个函数在不同的控制台中给出不同的结果

标签 javascript function variables scope console

我是 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/

相关文章:

javascript - 对不同函数求和 - Javascript

c - 指向函数代码结尾的指针

c - 尝试初始化时 undefined reference

function - 函数应该有多短?

perl - 为什么我不能使用 Perl 变量的值来访问词法变量名?

javascript - javascript中的简单金融利率函数

javascript - html react : How can I replace all 'img' elements with a React component while preserving styles?

javascript - AJAX 响应 XML 错误

php - 充电 前一个变量

javascript - 使用 JSON 中的数据更改 Javascript 中的 Html 内容