1

原生 JavaScript 构造函数/函数(如Function, Object, )Array是否始终在任何范围内可用?它们是由全局对象继承还是在同一级别甚至更高级别?

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

var Function = this.Function;

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

var Function = Function;
4

1 回答 1

1

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

(function() {
    var Function = Function;

    return Function;
})(); // undefined

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

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


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

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

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

于 2012-04-15T13:52:00.150 回答