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

时间:2013-11-23 06:55:13

标签: javascript

我正在学习js,我遇到了一个例子,其中||在将var声明为函数时使用:

var Triangulation = Triangulation || (function() {   
...   

在我看来,这是在分配var之前检查是否已经声明了var。 环顾网络,我没有看到使用这种方法的任何其他示例。采取这种方法的原因是什么:

var Triangulation = function() {   
...  

谢谢

5 个答案:

答案 0 :(得分:19)

这意味着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 (){...}; 

答案 1 :(得分:2)

在使用Short-circuiting为其分配新值之前,它会检查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 .

答案 2 :(得分:2)

对于||运算符,JS返回第一个表达式的值,该值表示为truthy值
例如:
A || B(假设A是空字符串,B是整数(12))
上面的表达式将返回12(即评估为真值的第一个表达式)。

在你的场景中,我们正在检查是否已经声明了三角测量,然后我们需要计算函数表达式并将其分配给三角测量。
var Triangulation = Triangulation || (function(){

答案 3 :(得分:1)

当您不一定知道(或想要管理)文件加载顺序时,这通常用于在多个文件之间拆分实现的命名空间包。通常,你会这样做:

var Namespace = Namespace || {}

在你的情况下,只是为了防止重新分配Triangulation类,如果已经定义的话。

答案 4 :(得分:-1)

我们在Javascript中使用了几种类型的运算符,就像&amp;&amp; (和)|| (要么) 而且! (不)运营商。

这些运算符也称为逻辑运算符。

逻辑运算符主要用于控制程序流。通常,您会发现它们是if,a while或其他控制语句的一部分。

||运算符用于确定其中一个条件是否为真。

示例:

if(x == 5 || y == 5) { .... .... }

感谢。