有人可以解释这两个JS代码片段之间的区别吗?

时间:2015-11-06 10:36:15

标签: javascript

有人可能会解释这两个代码片段之间的区别吗?有没有真正的功能差异?一个优于另一个吗?

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


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

1 个答案:

答案 0 :(得分: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;

哪个内存比其他任何选项都更有效。