为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript中的变量阴影

JavaScript中的变量阴影

白衣染霜花 2019-08-19 17:09:30
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规范)或事实(普通)名称?掩盖?超载?
查看完整描述

3 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

正确的术语是[变量]阴影

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

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

但是,ECMAScript规范[第5版]不使用术语阴影,也不能找到特定的替换术语。(基本的阴影行为在“10.2.2.1 GetIdentifierReference”和相关章节中定义。)

没有 超载,也没有 超越,这完全不同。我不知道在哪里黯然失色(在这种情况下)起源或者它应该如何与“正常” [变量]阴影区别开来。如果不存在阴影这个词来解释这种行为那么 - 从英语语言的角度来看 - 无论如何 - 黯然失色(“使微不足道/无关紧要”)可能比阴影(“阴影投射/变暗” 更合适) 。

快乐的编码。


查看完整回答
反对 回复 2019-08-19
?
MMTTMM

TA贡献1869条经验 获得超4个赞

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

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


查看完整回答
反对 回复 2019-08-19
?
达令说

TA贡献1821条经验 获得超6个赞

通常称为“阴影”。


查看完整回答
反对 回复 2019-08-19
  • 3 回答
  • 0 关注
  • 418 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信