我正在學習js,我遇到過一個例子,爲什麼使用||在變量函數聲明中?
var Triangulation = Triangulation || (function() {
...
在我看來,這是檢查是否該變種已經被分配給它之前宣稱:聲明VAR時的功能被使用。 環顧網絡,我沒有看到任何其他使用這種方法的例子。這將是一個理由採取這種做法VS:
var Triangulation = function() {
...
感謝
我正在學習js,我遇到過一個例子,爲什麼使用||在變量函數聲明中?
var Triangulation = Triangulation || (function() {
...
在我看來,這是檢查是否該變種已經被分配給它之前宣稱:聲明VAR時的功能被使用。 環顧網絡,我沒有看到任何其他使用這種方法的例子。這將是一個理由採取這種做法VS:
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(){...};
這種模式的一個常見用法是當你創建「命名空間」。例如,你可以定義: $ = $ || {}; $ .app = $ .app || {}; $ .app.something = $ .app.something || {}; 然後,您可以在每個文件的頂部包含相同的基本內容,以確保您的名稱空間已定義,並且您的定義不會互相打開。 –
它檢查是否分配給它使用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 .
這通常用於命名空間的包有它們的實現多個文件之間的分裂,當你不一定知道(或想要管理)文件加載順序。通常情況下,你可以這樣做有:
var Namespace = Namespace || {}
在你的情況下,它只是防止重新分配Triangulation
類,如果它已經定義。
For ||操作者,JS返回第一表達的評估,其向truthy值
例如值:
甲|| B(假設A是空字符串和B是整數(12))
上述表達式將返回12(即第一個表達式評估爲真值)。
在你的場景中,我們正在檢查三角剖分是否已經被聲明,然後我們需要計算函數表達式並將其分配給三角剖分。
var Triangulation = Triangulation || (函數(){
有幾種類型,我們在JavaScript中使用像& &(和運營商)||(或) 和!(不)運營商。
這些運營商也被稱爲邏輯運算符。
邏輯運算符主要用於控制程序流程。通常情況下,你會發現他們作爲一個部分,如果,
||運算使用時,或其他一些控制語句。確定不管其中的任何一個條件是否爲真
實施例:
如果(X == 5 || y == 5) { .... .... }
謝謝。
與問題無關。 – oligofren
可能是一次只設置一次的方法? – Sico
檢查這一個... http://stackoverflow.com/questions/2100758/javascript-or-variable-assignment-explanation – nik
'var Triangulation = Triangulation || (函數(){'只是暗示 **如果**'Trianglulation'在進入此步驟之前被聲明,則跳過該步驟 ** else **繼續執行函數{}內的代碼 –