假设我有这样的ajax调用:
$.ajax({
...
success : someFn
})
在代码审核中,他们询问someFn
可以访问哪些环境?他们更担心的是,所有变量,范围someFn
都可以访问,以及我将如何管理someFn
中所做的更改。
例如:if:
someFn : function()
{
//1. changes some object value
//2. Works based on some scope variables
}
现在的问题是:
someFn
并对其进行推理?someFn
内处理这些更改。 提前致谢
答案 0 :(得分:3)
someFn
范围内的变量取决于定义someFn
的位置,而不是您使用它的位置。在您的ajax调用中使用它不会授予它访问它无法访问的任何内容。
函数范围中的变量是其创建范围内的变量,它们是:创建它的上下文的本地,包含该上下文的上下文,包含那个上下文,等等通过全局上下文。
所以:
function foo() {
var a;
function bar() {
var b;
}
return bar;
}
foo
中的代码可以访问所有全局变量,也可以访问其局部变量a
。 bar
可以访问所有全局变量,a
变量由调用创建foo
的{{1}}创建的bar
变量,以及(当然)其局部变量b
更多(在我的博客上):Closures are not complicated
如果您需要从ajax上下文传递给someFn
的上下文信息,则需要定义一个新函数,将该信息作为参数传递给someFn
。 (显式地,或使用Function#bind
,它创建一个新函数,在调用时,调用具有特定this
值的原始函数和您给出的任何其他参数bind
。)
答案 1 :(得分:0)
通过
将范围变量传递给someFnsuccess : function(){
someFn(scope_var1, scope_var2);
}
$.extend(true,clonedObj,someObj)