[英]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.