Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
4年前关闭。
可以说我有一个像这样的ajax调用:
在代码审查中,他们询问
例如,如果:
现在的问题是:
如何将范围变量发送到
如果范围变量是对另一个对象的引用,则应如何处理
提前致谢
更多(在我的博客上):Closures are not complicated
如果有上下文信息需要从ajax上下文传递给
想改善这个问题吗?添加详细信息并通过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
中的代码可以访问所有全局变量,也可以访问其局部变量a
。 bar
可以访问所有全局变量,通过调用创建a
的foo
创建的bar
变量以及(当然)其局部变量b
。更多(在我的博客上):Closures are not complicated
如果有上下文信息需要从ajax上下文传递给
someFn
,则需要定义一个新函数,将该信息作为参数传递给someFn
。 (或者显式地使用Function#bind
,或者使用this
创建一个新函数,该函数在被调用时将使用特定的bind
值和您提供的所有其他参数调用原始函数。)08-08 04:42