2013-11-23 89 views
14

我正在學習js,我遇到過一個例子,爲什麼使用||在變量函數聲明中?

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

在我看來,這是檢查是否該變種已經被分配給它之前宣稱:聲明VAR時的功能被使用。 環顧網絡,我沒有看到任何其他使用這種方法的例子。這將是一個理由採取這種做法VS:

var Triangulation = function() { 
... 

感謝

+4

可能是一次只設置一次的方法? – Sico

+0

檢查這一個... http://stackoverflow.com/questions/2100758/javascript-or-variable-assignment-explanation – nik

+0

'var Triangulation = Triangulation || (函數(){'只是暗示 **如果**'Trianglulation'在進入此步驟之前被聲明,則跳過該步驟 ** else **繼續執行函數{}內的代碼 –

回答

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(){...}; 
+7

這種模式的一個常見用法是當你創建「命名空間」。例如,你可以定義: $ = $ || {}; $ .app = $ .app || {}; $ .app.something = $ .app.something || {}; 然後,您可以在每個文件的頂部包含相同的基本內容,以確保您的名稱空間已定義,並且您的定義不會互相打開。 –

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 . 
1

這通常用於命名空間的包有它們的實現多個文件之間的分裂,當你不一定知道(或想要管理)文件加載順序。通常情況下,你可以這樣做有:

var Namespace = Namespace || {} 

在你的情況下,它只是防止重新分配Triangulation類,如果它已經定義。

2

For ||操作者,JS返回第一表達的評估,其向truthy值
例如值:
甲|| B(假設A是空字符串和B是整數(12))
上述表達式將返回12(即第一個表達式評估爲真值)。

在你的場景中,我們正在檢查三角剖分是否已經被聲明,然後我們需要計算函數表達式並將其分配給三角剖分。
var Triangulation = Triangulation || (函數(){

-1

有幾種類型,我們在JavaScript中使用像& &(和運營商)||(或) 和!(不)運營商。

這些運營商也被稱爲邏輯運算符。

邏輯運算符主要用於控制程序流程。通常情況下,你會發現他們作爲一個部分,如果,

||運算使用時,或其他一些控制語句。確定不管其中的任何一個條件是否爲真

實施例:

如果(X == 5 || y == 5) { .... .... }

謝謝。

+0

與問題無關。 – oligofren

相關問題