Javascript 为什么在变量函数声明中使用| |?
我正在学习js,我遇到了一个例子,其中在将var声明为函数时使用了| |:Javascript 为什么在变量函数声明中使用| |?,javascript,Javascript,我正在学习js,我遇到了一个例子,其中在将var声明为函数时使用了| |: var Triangulation = Triangulation || (function() { ... 在我看来,这是在检查在赋值之前是否已经声明了var。 环顾网络,我没有看到任何其他使用这种方法的例子。采取这种方法的原因是什么 var Triangulation = function() { ... 感谢这意味着三角剖分变量可能已定义,如果已定义,则三角剖分变量将返回自身,如果尚未定义
var Triangulation = Triangulation || (function() {
...
在我看来,这是在检查在赋值之前是否已经声明了var。
环顾网络,我没有看到任何其他使用这种方法的例子。采取这种方法的原因是什么
var Triangulation = function() {
...
感谢这意味着
三角剖分
变量可能已定义,如果已定义,则三角剖分
变量将返回自身,如果尚未定义,则匿名函数将返回新变量三角剖分
的值
重要/敏感的是var
。这是一件棘手的事情。例如:
<script>
var triangulation = function (){return(1);};
</script>
在使用指定新值之前,它会检查是否存在
三角剖分。当您希望支持不同浏览器的功能时,这是一种常见做法
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 .
一个例子是。由于每个浏览器都需要不同的供应商前缀,因此我们使用|
为变量指定正确的方法,以便它支持所有浏览器
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 .
当您不一定知道(或不想管理)文件加载顺序时,这通常用于在多个文件之间拆分实现的命名空间包。通常,您可以通过以下方式完成此操作:
var Namespace = Namespace || {}
在您的例子中,如果已经定义了三角剖分
类,那么它只是为了防止重新指定该类。对于| |运算符,JS返回第一个表达式的值,该表达式的值将计算为truthy值
例如:
A | | B(假设A为空字符串,B为整数(12))
上述表达式将返回12(即计算为truthy值的第一个表达式)
在您的场景中,我们正在检查是否已声明三角剖分,然后需要计算函数表达式并将其分配给三角剖分。
var Triangulation=Triangulation | |(function(){我们在Javascript中使用了几种操作符,如&&(and)| |(or)
还有!(不是)操作员
这些运算符也称为逻辑运算符
逻辑运算符主要用于控制程序流。通常,您会发现它们是if、while或其他一些控制语句的一部分
| |运算符用于确定任一条件是否为真
例如:
如果(x==5 | | y==5)
{
....
....
}
谢谢。可能是一种只设置一次的方法吗?检查这一步…var Triangulation=Triangulation | | |(function(){
只是意味着如果在执行此步骤之前声明了Triangulation
,则跳过该步骤。否则继续执行函数{}中的代码。为什么这个问题得到了这么多的支持?我的意思是这个问题已经被问过很多次了。非常感谢你的回答。我很欣赏你对命名空间问题的见解。@Nikhil,这与你链接到的线程(我已经读过)不同。这不是| |做什么的问题,而是为什么在这种情况下使用它。此模式的一个常见用法是在创建“名称空间”时。例如,您可以定义:$=$$$|{};$.app=$.app |{};$.app.something=$.app.something.|{};然后,您可以在每个文件的顶部包含相同的基本内容,以确保您的名称空间已定义,并且您的定义不会相互冲突。这与问题无关。
var Namespace = Namespace || {}