gpt4 book ai didi

javascript - 为什么 JavaScript 变量在一些网站上打印正确,但在其他网站上被认为是未定义的?

转载 作者:行者123 更新时间:2023-11-30 09:30:03 24 4
gpt4 key购买 nike

为什么 JavaScript 变量在一些网站上打印正确,但在其他网站上被认为是未定义的?

例如,在 StackOverflow 网页中我可以这样做:

let x = 'y';
console.log(x); // Outputs "y".

但在其他一些网站的网页中,例如 this Duolingo exercise console.log 检查将失败:

let x = 'y';
console.log(x); // Outputs "Undefined".

根据我目前所读的内容,我知道它与范围有关。但我不清楚什么类型的作用域,因为我几乎总是只知道 JavaScript 中的 2 个作用域:Global(文档向下)和Function(涵盖子函数也是一个功能)。

它似乎与第三个范围有关,窗口(窗口向下)但我不清楚为什么我的 devtool 控制台也不会自动覆盖这个范围,在文档和函数上方,在 Duolingo 等这些网页中,我遇到了这个问题。

无论如何要声明变量,我尝试将我的变量放在 IIFE 中。它没有帮助,所以在我遇到这个问题的网站上,我的变量仍然是“未定义的”。例如:

计算器溢出:

(()=>{
let x = 'y';
console.log(x);
})(); // Outputs "y".

多邻国练习:

(()=>{
let x = 'y';
console.log(x);
})(); // Outputs "undefined".

为什么有些网站在声明变量时输出undefined,最好的方法是什么,你会说应对吗?

请在您的回答中解释是什么原因,这就是为什么只在某些站点而不在其他站点,以及如果我使用此 IIFE 任意设置我的变量的范围,我的 IIFE 尝试失败的原因。

作为一名 JS 新生,我尽了最大努力来表述这个问题。抱歉,如果有什么地方听起来不准确。

最佳答案

棘手的问题。这是因为它不是同一个 console.log。如果你在 stackoverflow 上打印

console.log

你得到的是这样的东西

ƒ log() { [native code] }

我在没有调用(括号)的情况下打印函数定义,因为我想查看定义。如果你在 duolingo 上做同样的事情,你会得到

ƒ (){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];(vt()||window.verbose)&&Function.prototype.apply.apply(t,[console,e])}

这意味着该网页覆盖了在 JavaScript 中有效的 console.log 定义。你得到 undefined 是因为默认情况下 JS 中的每个函数都返回 undefined 并且 REPL(开发工具)将此输出打印给你。

关于javascript - 为什么 JavaScript 变量在一些网站上打印正确,但在其他网站上被认为是未定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46864609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com