本机JavaScript的功能是“超级全球”吗?

时间:2012-04-15 13:47:07

标签: javascript types constructor scope native

FunctionObjectArray等原生JavaScript构造函数/函数是否始终可用于任何范围?它们是由全局对象继承还是在同一级别甚至更高级别继承?

例如,MooTools在其自执行功能中包含以下行:

var Function = this.Function;

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

var Function = Function;

1 个答案:

答案 0 :(得分:1)

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

(function() {
    var Function = Function;

    return Function;
})(); // undefined

至于为什么它首先完成了?据说可以防止用户错误或重新定义,并减少引擎必须查找的范围链的数量。相关博文:http://blog.minite.ch/?p=47

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


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

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

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