gpt4 book ai didi

JavaScript 变量作用域 - 正确使用

转载 作者:行者123 更新时间:2023-11-28 07:34:11 25 4
gpt4 key购买 nike

我读了这个style guide for angular来自约翰爸爸。有一个片段:

/*
* recommend
* Using function declarations
* and bindable members up top.
*/
function Avengers(dataservice, logger) {
var vm = this;
vm.avengers = [];
vm.getAvengers = getAvengers;
vm.title = 'Avengers';

activate();

function activate() {
return getAvengers().then(function() {
logger.info('Activated Avengers View');
});
}

function getAvengers() {
return dataservice.getAvengers().then(function(data) {
vm.avengers = data;
return vm.avengers;
});
}
}

所以我的问题是在函数 activate()getAvengers() 中,它们都引用变量 (dataservice) 和函数 ( >getAvengers()) 超出了他们的范围。这是正确使用吗?我应该将这 2 个绑定(bind)到变量 vm 中吗,例如:

vm.getAvengers = getAvengers; 
vm.dataservice = dataservice;
...
function activate() {
return vm.getAvengers().then(....);
}

function getAvengers() {
return vm.dataservice.getAvengers().then(.....);
}

最佳答案

专门针对您的情况

如果您打算在 Angular 应用程序中使用它,建议不要公开该服务,通过此对象公开它不会增加值(value),并且可能会在未来,当经验不足的开发人员修改您的代码时,可能会导致不稳定访问共享依赖项。

如果您想跨多个实体访问dataservice对象功能,请将其注册为 Angular 服务,并将其注入(inject)到需要它的不同实体中。

一般情况

您描述的两种方式都是完全正确的用法,但通常情况下,使用的答案是“这取决于情况”。

为什么要使用一个为另一个是如果您想在外部公开变量(即,如果您想让其他人通过返回的对象访问该对象,期望其他人动态更改您对象上的服务)

所以在这个例子中你应该问自己几个问题

  1. 我想通过另一个对象公开此对象还是想让 Angular DI 将其传递给需要此功能的其他 Controller
  2. 我是否想要允许外部实体修改此对象
  3. 通过我的对象公开此服务是否会使该对象的感知使用更加困惑?

但是对于这种特殊情况,您不应该通过对象公开它(通过变量vm,它绑定(bind)到返回对象this,在本例中)

关于JavaScript 变量作用域 - 正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28785442/

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