我希望这样做是因为我的项目通常使用像下面这样的快捷变量:
(function() {
var world = new World(),
Event = world.Event,
Guide = world.Guide;
Event.add('updateUI', function() {
// 1st: Correct, the value of 'this' refers to a world
this.Guide.show('UI updated');
// 2nd: Ok because 'world' was defined in outer scope
world.Guide.show('UI updated');
// 3rd: Ok because 'Guide' was defined in outer scope
Guide.show('UI updated');
});
})();
如果我将
Event.add('updateUI', function() { ... });
移动到其他文件中,只有第一条语句 (this.Guide.show
) 能够正常工作。如何防止该函数使用外部范围的 world
或 Guide
变量,使得第二和第三条语句从一开始就会抛出错误。
use strict
很接近这个要求,但它仅仅防止你获取全局对象。更新以使此问题更清晰:主要问题是:是否有任何方法可以防止函数查找外部范围的变量?如果没有,请解释原因,因为我认为这是一个合理的需求。