Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么JavaScript变量在某些站点中正确打印,但在其他站点中被认为是未定义的?_Javascript_Variables_Scope - Fatal编程技术网

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

为什么JavaScript变量在某些站点中正确打印,但在其他站点中被认为是未定义的?,javascript,variables,scope,Javascript,Variables,Scope,为什么JavaScript变量在某些站点中正确打印,但在其他站点中被认为是未定义的 例如,在StackOverflow网页中,我可以执行以下操作: let x = 'y'; console.log(x); // Outputs "y". 但在其他一些网站的网页中,如console.log检查将失败: let x = 'y'; console.log(x); // Outputs "Undefined". 从我目前所读到的内容来看,我理解这与范围有关。但我不清楚作用域的类型,因为在JavaSc

为什么JavaScript变量在某些站点中正确打印,但在其他站点中被认为是未定义的

例如,在StackOverflow网页中,我可以执行以下操作:

let x = 'y';
console.log(x); // Outputs "y".
但在其他一些网站的网页中,如console.log检查将失败:

let x = 'y';
console.log(x); // Outputs "Undefined".
从我目前所读到的内容来看,我理解这与范围有关。但我不清楚作用域的类型,因为在JavaScript中我几乎总是只知道两个作用域:全局文档向下,以及覆盖函数子函数的函数

这似乎与第三个作用域有关,窗口向下,但我不清楚为什么我的devtool控制台没有自动覆盖这一个,在文档和功能上面,在像Duolingo这样的网页中,我遇到了这个问题

无论如何,为了声明变量,我尝试将变量放入IIFEs中。这没有帮助,所以我仍然没有定义我的变量,在我遇到这个问题的网站上。例如:

堆栈溢出:

(()=>{
let x = 'y';
console.log(x);
})(); // Outputs "y".
多林戈运动:

(()=>{
let x = 'y';
console.log(x);
})(); // Outputs "undefined".
为什么有些网站在声明变量时会输出未定义的变量?你认为最好的方法是什么

请在你的回答中解释这是什么原因,为什么只有在一些网站上,而不是在其他网站上,以及为什么我的iLife尝试失败,如果我任意使用这个iLife设置变量的范围


作为一名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定义。由于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定义。由于JS中的每个函数在默认情况下都返回未定义的结果,因此您会得到未定义的结果,而REPL dev tools会将此输出打印给您。

很可能是站点脚本中的console.log存在过度使用,从而阻止您使用它。类似于console.log=function{/*doNothing*/}为什么会有人这样做?。也许是为了更难挖掘存储的数据,您链接的duolingo页面需要登录,因此我无法复制。您在哪里输入此代码?很可能是该站点脚本中的console.log存在过度使用,从而阻止您使用它。类似于console.log=function{/*doNothing*/}为什么会有人这样做?。也许是为了更难挖掘存储的数据,您链接的duolingo页面需要登录,因此我无法复制。您在哪里输入此代码?