gpt4 book ai didi

javascript - 为函数创建新上下文

转载 作者:行者123 更新时间:2023-11-28 19:11:35 24 4
gpt4 key购买 nike

假设我有一个像这样的 ajax 调用:

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

在代码审查中,他们询问了环境的作用someFn可使用?他们更担心的是,所有变量、作用域做什么someFn有权访问以及我将如何管理 someFn 中所做的更改。

例如,如果:

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

现在的问题是:

  1. 如何将范围变量发送到 someFn并解释它们的原因?
  2. 如果范围变量是对另一个对象的引用,我应该如何处理 someFn 内的这些更改。

提前致谢

最佳答案

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

函数作用域中的变量是创建它的作用域中的变量,它们是:创建它的上下文的局部变量、包含该上下文的上下文、包含那个上下文的上下文,等等通过全局背景。

所以:

function foo() {
var a;

function bar() {
var b;
}

return bar;
}

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

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

如果您需要从 ajax 上下文传递到 someFn 的上下文信息,则需要定义一个新函数,将该信息传递给 someFn ,如下所示论据。 (显式地或使用Function#bind,它创建一个新函数,在调用时,使用特定的this值和您提供的任何其他参数来调用原始函数 >绑定(bind)。)

关于javascript - 为函数创建新上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30642718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com