首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将noop分配给变量

将noop分配给变量
EN

Stack Overflow用户
提问于 2017-04-29 17:37:46
回答 1查看 714关注 0票数 2

我深入研究了角功用源代码,只遇到了下面的一行:

代码语言:javascript
复制
export const NOOP: any = () => {};

嗯,上面很明显。声明一个不执行任何操作的变量。现在,在同一个库中,我有以下方法:

代码语言:javascript
复制
export function resolveViewDefinition(factory: ViewDefinitionFactory): ViewDefinition {
  let value: ViewDefinition = VIEW_DEFINITION_CACHE.get(factory) !;
  if (!value) {
    value = factory(() => NOOP);
    value.factory = factory;
    VIEW_DEFINITION_CACHE.set(factory, value);
  }
  return value;
}

如果不设置这一行,并将其注释掉,并设置如下块,会产生什么影响:

代码语言:javascript
复制
  if (!value) {
    // value = factory(() => NOOP);
    value.factory = factory;
    VIEW_DEFINITION_CACHE.set(factory, value);
  }

有谁能更详细地解释一下这句话:

代码语言:javascript
复制
value = factory(() => NOOP);

在上面放更多的灯?我能看到正在发生的事情,但我无法理解消除它的效果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-29 18:50:45

resolveViewDefinition函数用于获取视图定义。首先,它尝试从缓存中获取value,如果没有缓存的值,则调用ViewDefinitionFactory

ViewDefinitionFactory以函数作为参数。为什么?

代码语言:javascript
复制
/**
 * Factory for ViewDefinitions.
 * We use a function so we can reexecute it in case an error happens and use the given logger
 * function to log the error from the definition of the node, which is shown in all browser
 * logs.
 */
export interface ViewDefinitionFactory { (logger: NodeLogger): ViewDefinition; }

当我们只获取ViewDefinition时,我们不需要记录错误,因此使用NOOP函数调用它。

但是,当我们在执行模板过程中出现错误时,使用NodeLogger运行这个工厂,以确定是哪个节点导致了错误。

让我们看看示例柱塞

代码语言:javascript
复制
@Component({
  selector: 'my-app',
  template: `<h2 (click)="x()">Hello</h2>`
})
export class App {}

这是工厂

代码语言:javascript
复制
function View_App_0(l) {
  return jit_viewDef1(0,[
      (l()(),jit_elementDef2(0,null,null,1,'h2',[],null,[[
        null,
        'click'
      ]
    ],function(v,en,$event) {
      var ad = true;
      var co = v.component;
      if (('click' === en)) {
        var pd_0 = (co.x() !== false);
        ad = (pd_0 && ad);
      }
      return ad;
    },null,null)),
    (l()(),jit_textDef3(null,['Hello']))
  ]
  ,null,null);
}

1)运行应用程序

代码语言:javascript
复制
function resolveViewDefinition(factory) {
    var value = ((VIEW_DEFINITION_CACHE.get(factory))); // we haven't cached it yet 
    if (!value) { // value is undefined 
        value = factory(function () { return NOOP; }); //get ViewDefinition but do not log errors
        value.factory = factory; // save link to the factory so it can be used later
        VIEW_DEFINITION_CACHE.set(factory, value); // store factory
    }
    return value;
}

2)点击Hello

代码语言:javascript
复制
((logViewDef.factory))(nodeLogger); // use saved link to call factory with logger

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43698647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档