繁体   English   中英

JavaScript 中变量阴影的正确术语是什么?

[英]What is the correct term for variable shadowing in JavaScript?

下面我们有一个IIFE ,它(像任何函数一样)创建了一个局部作用域。 在该范围内有一个parseInt函数。 现在,由于浏览器中已经有一个具有该名称的全局函数,本地函数将掩盖全局parseInt函数——在 IIFE 中,对parseInt任何调用都将调用本地函数,而不是全局函数。 (全局函数仍然可以用window.parseInt引用。)

parseInt('123', 10); // the browser function is called

(function() {

    function parseInt() { return 'overshadowed'; }

    parseInt('123', 10); // the local function is called

})();

parseInt('123', 10); // the browser function is called

是否有法律上的(ECMAScript 规范)或事实上的(通用)名称? 遮天蔽日? 超载?

正确的术语是[Variable] Shadowing

在计算机编程中,当在特定范围(决策块、方法或内部类)内声明的变量与在外部范围内声明的变量具有相同名称时就会发生变量影子。 据说这个外部变量是隐藏的......

JavaScript 中的函数只是存储在变量(或属性)中的函数对象,它们遵循与普通变量(或属性)相同的作用域链/解析规则 这解释了为什么原始文件仍然可以作为window.parseInt访问。 是“IIFE”引入了这个新作用域(函数是在 JavaScript 中引入新作用域的唯一方法)。

但是, ECMAScript 规范 [第 5 版]没有使用术语shadowing ,我也找不到特定的替代术语。 (基本的遮蔽行为在“10.2.2.1 GetIdentifierReference”和相关章节中定义。)

超载,并没有覆盖,这是完全不同的。 我不知道遮蔽(在这种情况下)起源于何处,也不知道它与“正常” [变量] 阴影有何不同。 如果术语阴影不存在来解释这种行为,那么——无论如何,从英语的角度来看——遮蔽(“使无关紧要/无关紧要”)可能比阴影(“将阴影投射/变暗”)更合适.

快乐编码。

如果它是偶然/错误发生的,你会称它为破坏原始的parseInt()

否则,我相信我最近在 Stack Overflow 上看到它提到了阴影

通常称为“阴影”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM