原生 JavaScript 函数是否类似于“超全局”?

Are native JavaScript functions something "superglobals"-like?

本文关键字:全局 超全局 JavaScript 函数 是否 类似于 原生      更新时间:2023-09-26

原生JavaScript构造函数/函数(如FunctionObjectArray在任何范围内总是可用的吗?它们是由全局对象继承的还是由同一级别甚至更高级别的东西继承的?

例如,MooTools 在其自执行函数中包含以下行:

var Function = this.Function;

所以我问自己,是否存在这些本机构造函数不可用的情况?也许在服务器端或严格的 JS?还是缓存本地引用只是一个性能问题?但如果是这样,为什么不这样做呢:

var Function = Function;

它们具有相同的名称,因此您不能这样做。

(function() {
    var Function = Function;
    return Function;
})(); // undefined

至于为什么首先这样做?据说是为了防止用户错误或重新定义,并且还可以减少引擎必须查找才能找到某些东西的范围链的数量。相关博客文章:http://blog.minite.ch/?p=47

当然,Function不是只读的,所以即使有人在全局命名空间中重新定义了Function也无济于事。任何这样做的人都应该得到它,虽然=)


编辑:如果他们真的想防止用户错误,一个万无一失的方法是:

var Function = (function() {}).constructor;

但如上所述,这是毫无意义的。