2015-11-06 88 views
0

有人可能可以解釋這兩個代碼片段之間的區別嗎?有沒有真正的功能差異?一個人比另一個人高嗎?有人可以解釋這兩個JS代碼片段之間的區別嗎?

isIPad = function() { 
    return navigator.userAgent.match(/iPad/i) != null; 
}; 


isIPad = (function isIPad() { 
    return navigator.userAgent.match(/iPad/i) != null; 
}()); 
+2

1)分配函數本身; 2)賦值函數的返回值 – hindmost

+1

每當你看到括號'()',就表示函數正在執行,某個值正在被返回..返回的值可能是任何東西..你可能會發現[this](http:// www .kirupa.com/html5/closures_in_javascript.htm)有趣! – Rayon

回答

2

第一可變將存儲函數將返回取決於該設備是否是一個iPad一個布爾值。

var thisIsAnIPad = isIPad() 
if(thisIsAnIPad) { 
    console.log('This is an iPad!'); 
} 

第二可變計算直線距離,並將其存儲在布爾結果。您可以馬上使用該值。

if(isIPad) { 
    console.log('This is an iPad!'); 
} 

這兩種方法都沒有客觀上的優越性。它們都有不同的用例。例如,如果您只想知道用戶是否在iPad上,那麼您可以使用第二個選項。

如果它是一個值,您將需要重新計算多次(也許用戶代理正在更改?),那麼第一個選項是更可取的。

然而,第二種方法可以簡化爲

isIPad = navigator.userAgent.match(/iPad/i) != null; 

這將是更多的內存比任一其它選項高效。

相關問題