为什么使用 ||在变量函数声明中

Why use || in variable function declaration?

本文关键字:函数 声明 变量 为什么      更新时间:2023-09-26

我正在学习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({........}

谢谢。