2

可能重复:
是否可以访问函数的闭包?

假设我有以下揭示模块模式的实现:

var myModule = (function() {
    var myVar,
        _self = this;

    function setMyVar( myVar ) {
        _self.myVar = myVar;
    }

    return {
        setMyVar: setMyVar
    }
})()

myModule.setMyVar('happy');​

我想要做的是将模块级别 myVar 设置为“快乐”。这不起作用,因为“this”等于匿名父函数中的窗口。一个简单的解决方法是避免子父名称冲突,但抛开这一点不谈,有没有一种方法可以从嵌套子函数内部访问对匿名函数范围的引用?

4

2 回答 2

3

“一个简单的解决方法是避免孩子与父母的名字冲突”

请不要认为这是一种解决方法,而是一种最佳实践。变量阴影通常不会增加好处,但是当您忘记正在使用的变量时,可能会给代码和错误增加混乱。

唯一可以作为可以在代码中直接操作的对象的变量范围(或变量对象,或绑定对象......)“全局”范围。没有嵌套范围允许这种直接访问,所以不,除了避免隐藏变量之外没有其他选择。

这通常不应该是一个问题。函数变量或参数只能访问(因此隐藏)其原始范围内的变量,因此将函数传递到不同的范围不会导致与该范围内的变量发生任何冲突。

如果需要,像http://jshint.com这样的代码验证器能够为您捕获阴影变量。

于 2012-09-23T16:43:33.047 回答
1

不可以。如果它被屏蔽了,它就被屏蔽了,您将无法访问它。

于 2012-09-23T16:21:46.397 回答