Javascript 在同一个函数中使用用于命名函数的变量名有何意义?
在这个代码段中,从中,函数的名称是Javascript 在同一个函数中使用用于命名函数的变量名有何意义?,javascript,angularjs,ngresource,Javascript,Angularjs,Ngresource,在这个代码段中,从中,函数的名称是user,在函数中,它们使用的是相同名称的变量 var User = $resource('/user/:userId', {userId:'@id'}); var user = User.get({userId:123}, function() { user.abc = true; user.$save(); }); 这有什么意义?“用户”不是函数名,而是从给定资源读取的对象名 说得对。当http请求完成时,用户成为充满数据的代理 第二个参数-函数是
user
,在函数中,它们使用的是相同名称的变量
var User = $resource('/user/:userId', {userId:'@id'});
var user = User.get({userId:123}, function() {
user.abc = true;
user.$save();
});
这有什么意义?“用户”不是函数名,而是从给定资源读取的对象名
说得对。当http请求完成时,用户成为充满数据的代理
第二个参数-函数是在用户成功加载后调用的回调函数,所以用户成为完全创建的对象
因此,当调用.get时,其工作原理与此完全相同:
- 使用“代理”创建变量用户
- 从/user/123读取用户
- 使用数据和“资源方法”($save,$delete…)实现用户变量
- 调用给定函数回调,其中:
- 在用户对象中设置abc
- 将其保存回资源($save-POST-to/user/123)
“user”不必作为参数传递,因为user是在调用回调之前设置的。调用
user.get()时
,它返回一个承诺,并继续处理。当该承诺解析时,angular将您设置的变量(在本例中为user
)设置为解析值。它还调用成功回调函数,以便您可以在该点安全地更改它
使用上面的例子,下面是发生的情况
User.get
返回一个承诺,并将var User
设置为该承诺{id:123,name:“Imray”}
user
设置为{id:123,名称:“Imray”}
user.abc
设置为true
,这样您的对象现在是{id:123,名称:“Imray”,abc:true}
user.$save()
,将其保存到服务器等本质上,它没有什么问题,只是注意执行顺序。看起来您在get回调中遗漏了函数参数:
User.get({userId:123},function(User){
不完全是。回调函数的内容指的是var user
。我认为@Rasalom有权使用它,这是文档中的一个输入错误——如果您在文档中进一步搜索$save
,您将看到该代码重复,但user
被传递到回调函数中。它明确指向函数param,这里有一个例子:@Blazemonger所以Angular文档中又出现了一个错误?我的意思是,就像用户在从资源读取之前被分配一样。这不是承诺。它只是一个空对象,您可以将其传递到模板,并在读取资源完成时填充(和更新)它)我已经添加了文档的确切部分,因此回调运行时好像它完全独立于它所在的函数一样?好像它是一个写了几行的随机函数?几乎是。它运行时是独立的,但仅当User.get()时才调用
已解析。啊哈。这似乎是一种奇怪的方法,但我想它会起作用。它提供了一些选项。您可以使用var user=user.get({userId:123});
并依赖angular来解析它,或者在解析时使用回调来进行额外处理。或者两者都可以。文档中的示例旨在说明这两种方法。