一回しか使わない判別を何回も呼び出さない
by FiNGAHOLiC
HTML
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
<button id="btn1">slow</button>
<button id="btn2">fast</button>
<button id="btn3">closure</button>
JavaScript
// cookieの値とかブラウザ判別とか、一回ページが読み込まれたら変わらない値
var test = navigator.userAgent;
// クリックすると、上記の値によって分岐しアラートが表示される関数
var alertUA = function () {
if (test.indexOf('Chrome') !== -1) {
alert('Chromeだけどなにか?');
} else {
alert('Chromeとは違うんだよ。Chromeとは。');
}
};
// bind
$('#btn1').click(function () {
alertUA();
});
/*
* これだと、クリックする度にif文の評価がされるけど、
* 一回ページ読みこまれたときに評価したら以降変わることないから無駄。
* よって、最初の呼び出し結果で自身を上書きすれば良い感じ。
*/
var alertUA_fast = function () {
if (test.indexOf('Chrome') !== -1) {
alertUA_fast = function () {
alert('Chromeだけどなにか?');
};
} else {
alertUA_fast = function () {
alert('Chromeとは違うんだよ。Chromeとは。');
};
}
alertUA_fast();
};
// bind
$('#btn2').click(function () {
alertUA_fast();
});
// closure
var alertUA_closure = (function(ua){
console.log('1回しか評価されない');
var str = (/Chrome/i.test(ua))
? 'Chromeだけどなにか?'
: 'Chromeとは違うんだよ。Chromeとは。';
return function(){
return alert(str);
};
})(test);
// bind
$('#btn3').click(function(){
alertUA_closure();
});