Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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 - Fatal编程技术网

Javascript 我可以澄清全局范围、全局对象、全局对象和全局变量的术语吗?

Javascript 我可以澄清全局范围、全局对象、全局对象和全局变量的术语吗?,javascript,Javascript,我读过很多文章,如果能讨论我在这里列出的要点,我会觉得很有帮助。如果一个问题的篇幅太长,我会将它们分开重新发布,但由于它们是相关的,而且不会太长,我认为将它们放在一个问题中是有意义的 一, 第一项任务是定义在全局范围内发生的事情。 从我收集的信息来看,当某个东西在全局范围内时,它可以在任何.js文件中的任何位置被访问 二, 看看这个 这里的术语“全局对象”(或标准内置对象)不是 与全局对象混淆。这里,“全局对象”指的是 全局范围中的对象 我认为这意味着内置对象在全局范围内(如上所述) 可以使用中

我读过很多文章,如果能讨论我在这里列出的要点,我会觉得很有帮助。如果一个问题的篇幅太长,我会将它们分开重新发布,但由于它们是相关的,而且不会太长,我认为将它们放在一个问题中是有意义的

一,

第一项任务是定义在全局范围内发生的事情。
从我收集的信息来看,当某个东西在全局范围内时,它可以在任何.js文件中的任何位置被访问

二,

看看这个

这里的术语“全局对象”(或标准内置对象)不是 与全局对象混淆。这里,“全局对象”指的是 全局范围中的对象

我认为这意味着内置对象在全局范围内(如上所述)

可以使用中的this操作符访问全局对象本身 全球范围。事实上,全局范围由属性组成 全局对象的属性,包括继承的属性(如果有)

这最后一句话几乎威胁到我的理解力。我可以确认全局范围不完全由全局对象的属性组成吗?因为上一段说内置对象也在全局范围内,它们不是全局对象的属性

三,

全局范围中的其他对象由用户创建 脚本或由主机应用程序提供。主机对象可用 浏览器中的上下文记录在API参考中

当我将.js文件连接到.html文件时,它会将其连接到DOM API,从而使
窗口
(全局对象)处于全局范围内。这是表达正在发生的事情的正确方式吗

四,


提到全局变量。MDN表示,在浏览器中,所有全局变量都是全局对象的成员。我认为全局变量是全局对象属性的另一个词(无论您是在浏览器中还是
node.js
)。我所想的是真的吗?

JavaScript有多种全局变量。至少有:

  • 全局对象的继承属性
  • 全局对象自身属性的全局对象;这包括内置的globals
  • 不是全局对象属性的全局对象
  • (这些都是顺序,因此如果在所有三个级别上使用相同的名称,那么在全局范围中使用标识符时得到的名称将是来自#3的名称。)

    例如:

    <代码>var; 让我来吧; const hasOwn=Object.prototype.hasOwnProperty; //在浏览器上,由于元素具有'id'(或在某些情况下)而创建的全局 //`name`)是全局对象的继承属性(请注意,IE和Legacy //(有旧的行为) console.log(“theDiv:”); console.log(此处为“theDiv”);//真的 console.log(hasOwn.call(这是“theDiv”);//假的 //全局范围中的`var`创建全局对象的“own”属性 log(“theVar:”); console.log(此处为“theVar”);//真的 console.log(hasOwn.call(这是“theVar”);//真的 //全局范围中的'let'、'const'和'class'声明创建 //不是全局对象的属性 console.log(“theLet:”); console.log(此处为“theLet”);//假的 console.log(hasOwn.call(this,“theLet”);//假的 //内置全局对象是全局对象的自身属性: log(“数组:”); console.log(此处为“数组”);//真的 console.log(hasOwn.call(这个“数组”);//真的 log(“未定义:”); console.log(此处为“未定义”);//真的 console.log(hasOwn.call(此为“未定义”);//真的 //这里有一个事实的例子,当同一个名字在所有级别使用时, //最里面的人(本例中为“let”)获胜: const div=document.createElement(“div”); div.id=“示例”; document.body.appendChild(div);//由于'id'而继承了全局` this.example=“自己的例子”//这是我们自己的财产 let example=“let example”//通过“let”创建的全局` 日志(“优先级:”); console.log(example==“let example”);//正确,最里面的赢家
    。作为控制台包装器{
    最大高度:100%!重要;
    }
    
    
    此问题超出堆栈溢出的范围。这里的问题应该更具体一些,例如关于您遇到的问题或无法解决的错误。这个问题可能更适合于我建议你将问题重新发布在那里。谢谢@Karl HenryMartinsson的建议。我可以把问题复制粘贴到那里吗?“因为上一段说内置对象也在全局范围内,它们不是全局对象的属性。”这一段中有什么特别的地方让你认为它是这样说的?(顺便说一句,我不同意卡尔的观点,但只是有一点点。)我看到一些参考资料和链接似乎表明了某种程度的研究。至于超出范围,我不同意。Stackoverflow是不是一个从高级程序员开始的地方,欢迎发布关于大多数与程序环境以及实际编程有关的问题?我同意@HowardBrown,是的,有几个问题,但它们都是关于同一个基本问题,只是它的不同方面。哇,这看起来像是一个惊人的答案@T.J.Crowder。我现在就来看看。没有problem@tonitone117-啊!确实如此,我开始写一封回复信,然后被研究转移到一边。。。将返回给您。@tonitone117-以上内容不是特定于浏览器的。:-)我确实在几个地方使用了浏览器作为示例,并在另一个地方解决了您的浏览器特定问题。其中大部分都在JS规范1中。一个例子是我上面给出的例子:id为
    id
    的DOM元素是全局对象继承自的对象的属性(这是最近才确定的;它反映了浏览器imp