为什么使用 ||在变量函数声明中
Why use || in variable function declaration?
我正在学习js,我遇到了一个例子,其中||在将var声明为函数时使用:
var Triangulation = Triangulation || (function() {
...
在我看来,这是在分配之前检查是否已声明 var。环顾网络,我没有看到任何其他使用这种方法的例子。 采用这种方法的原因是什么,而不是:
var Triangulation = function() {
...
谢谢
这意味着triangulation
变量有可能已经定义,如果是,则triangulation
变量返回自身,如果尚未定义 - 匿名函数将返回新变量triangulation
的值。
重要/敏感的事情是var
.这是一项棘手的业务。例如:
<script>
var triangulation = function (){return(1);};
</script>
实际上意味着:
<script>
window.triangulation = function (){return(1);};// because "triangulation" is in global
// namespace and "var" in this case
// means nothing "local", as you may expect
</script>
下次,初始化var triangulation = ...
将覆盖全局变量。如果你想保留它,你必须写:
var triangulation = triangulation || function (){...};
它会在使用短路为其分配新值之前检查Triangulation
是否存在。当您想要支持因浏览器而异的功能时,这是一种常见做法。
一个例子是 requestAnimationFrame
.由于每个浏览器都需要不同的供应商前缀,因此我们使用||
为变量分配正确的方法,以便它支持所有浏览器。
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000 / 60);
};
})();
//whatever exists will be assigned to window.requestAnimFrame .
对于 || 运算符,JS 返回第一个表达式的值,其计算结果为真值
例如:
A||B(假设 A 是空字符串,B 是整数 (12((
上面的表达式将返回 12(即计算结果为真值的第一个表达式(。
在您的 scenarior 中,我们正在检查三角测量是否已经声明,那么我们需要计算函数表达式并将其分配给三角测量。
var 三角测量 = 三角测量 ||(函数(( {
这通常用于在多个文件之间拆分其实现的命名空间包,当您不一定知道(或想要管理(文件加载顺序时。通常,您将使用以下命令执行此操作:
var Namespace = Namespace || {}
在您的情况下,这只是为了防止重新分配Triangulation
类(如果已定义(。
我们在 Javascript 中使用了几种运算符,如 &&(and( ||(或(和!(不是(操作员。
这些运算符也称为逻辑运算符。
逻辑运算符主要用于控制程序流。通常,您会发现它们是 if、a while 或其他控制语句的一部分。
|| 运算符用于确定任一条件是否为真。
例:
if (x==5 || y==5({........}
谢谢。
- 直接在函数声明上使用function.prototype.bind
- 可以Resharper在我的javascript函数声明中添加分号
- 此行是否包含函数声明
- 函数声明与函数表达式之间的性能差异
- 为什么在javascript函数声明中使用逻辑运算符
- 函数声明未定义-原因
- JavaScript执行从函数声明开始,而不是从$(document).ready()开始
- 杰辛特 |传递默认设置 |函数声明和“this”
- 未知的 JavaScript 函数声明模式
- JavaScript 中的函数声明
- 在函数声明而不是运行时分析所有变量
- 命名函数声明有什么好处吗
- 将一个简单的函数声明形成JavaScript中的闭包
- 返回语句后的函数声明全局变量不会被覆盖
- (this)在函数声明之后
- 为什么使用 ||在变量函数声明中
- 为什么要将函数声明分配给命名变量
- 具有相同参数的 Javascript 函数声明
- 从性能的角度来看,函数声明与表达式
- 为什么 Mozilla Javascript 调试器的断点会捕捉到函数声明