JavaScript中的variables阴影
下面我们有一个IIFE (像任何函数一样)创build一个局部范围。 在该范围内有一个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规范)或事实上 (共同)的名字? 掩盖? 超载?
正确的术语是[variables]阴影
在计算机编程中, 当在特定范围(判定块,方法或内部类)中声明的variables与在外部范围中声明的variables名称相同时 , 会发生variables阴影。 这个外部variables据说是阴影的…
JavaScript中的函数只是存储在与正常variables(或属性)相同的范围链/parsing规则的variables(或属性)中的函数对象 。 这就解释了为什么原始文件仍然可以作为window.parseInt
访问。 引入这个新范围的是“IIFE”(函数是在JavaScript中引入新范围的唯一方法)。
但是, ECMAScript规范[第5版]不使用术语阴影 ,也不能find具体的replace术语。 (基本阴影行为在“10.2.2.1 GetIdentifierReference”和相关部分中定义。)
这不是 超载 , 并不是 超载 ,这是完全不同的。 我不知道哪里出现了遮蔽 (在这种情况下),或者它是如何与“正常的” (可变的)遮蔽有所不同的。 如果“ 阴影”这个术语不是已经存在来解释这种行为,那么无论如何,从英语的观点来看, 阴影 (“使之变得微不足道/不重要”)可能比阴影 (“投下阴影/变暗”)更合适。 。
快乐的编码。
如果发生意外/错误,你会把它叫做原始的parseInt()
。
否则,我相信我最近在Stack Overflow上看到了它的影子 。
更常被称为“阴影”。