我从共享点撕下了一些代码,发现它们的功能中包含随机的true false语句。我首先想到的是它们将阻止运行下一条语句,但是当我进行简单测试时,控制台日志显示该语句无论如何都可以运行。
有人能让我知道这是什么意思,目的是什么,为什么要这么做。
这是我遇到的一个示例,并将发布我的测试。
AsyncLazy<T>
这是我的测试,控制台窗口击中了我认为不会的所有console.logs
public sealed class AsyncLazy<T>
{
private readonly object _mutex;
private readonly Func<Task<T>> _factory;
private Lazy<Task<T>> _instance;
public AsyncLazy(Func<Task<T>> factory)
{
_mutex = new object();
_factory = RetryOnFailure(factory);
_instance = new Lazy<Task<T>>(_factory);
}
private Func<Task<T>> RetryOnFailure(Func<Task<T>> factory)
{
return async () =>
{
try
{
return await factory().ConfigureAwait(false);
}
catch
{
lock (_mutex)
{
_instance = new Lazy<Task<T>>(_factory);
}
throw;
}
};
}
public Task<T> Task
{
get
{
lock (_mutex)
return _instance.Value;
}
}
public TaskAwaiter<T> GetAwaiter()
{
return Task.GetAwaiter();
}
public ConfiguredTaskAwaitable<T> ConfigureAwait(bool continueOnCapturedContext)
{
return Task.ConfigureAwait(continueOnCapturedContext);
}
}
答案 0 :(得分:0)
&&
不仅返回值。它还具有(流控制)效果:仅在第一个操作数为true时才评估第二个操作数。也就是说,如果A && B
已经是B
,则A
不会运行false
。 (这称为short-circuit evaluation。)
换句话说,
typeof window.WebForm_OnSubmit == "function" && window.WebForm_OnSubmit();
表现像
if (typeof window.WebForm_OnSubmit == "function")
window.WebForm_OnSubmit();
但略短些。
重点不是返回true
或false
(结果将被忽略);关键是仅在定义为函数的情况下调用window.WebForm_OnSubmit
。
类似地,
!bValidSearchTerm && _ClearSearchTerm("");
类似:
if (!bValidSearchTerm)
_ClearSearchTerm("");