Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
            
                    
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        4年前关闭。
                    
                
        

可以说我有一个像这样的ajax调用:

$.ajax({
     ...
     success : someFn
})


在代码审查中,他们询问someFn可以访问什么环境?他们更担心someFn可访问的所有变量,范围以及我将如何管理在someFn中完成的更改。

例如,如果:

someFn : function()
{
    //1. changes some object value
    //2. Works based on some scope variables
}


现在的问题是:


如何将范围变量发送到someFn并对其进行推理?
如果范围变量是对另一个对象的引用,则应如何处理someFn中的那些更改。


提前致谢

最佳答案

someFn范围内的变量取决于定义someFn的位置,而不是您使用的位置。在您的ajax调用中使用它不会授予它对任何尚无访问权限的访问权限。

函数作用域中的变量是在其创建作用域中的变量,这些变量是:创建函数的上下文的局部变量,包含该上下文的上下文,包含该上下文的上下文,等等。

所以:

function foo() {
    var a;

    function bar() {
        var b;
    }

    return bar;
}


foo中的代码可以访问所有全局变量,也可以访问其局部变量abar可以访问所有全局变量,通过调用创建afoo创建的bar变量以及(当然)其局部变量b

更多(在我的博客上):Closures are not complicated

如果有上下文信息需要从ajax上下文传递给someFn,则需要定义一个新函数,将该信息作为参数传递给someFn。 (或者显式地使用Function#bind,或者使用this创建一个新函数,该函数在被调用时将使用特定的bind值和您提供的所有其他参数调用原始函数。)

08-08 04:42