http://d.hatena.ne.jp/amachang/20071116/11...
var load = function(src, check, next) {
check = new Function('return !!(' + check + ')');
if (!check()) {
var script = document.createElement('script')
script.src = src;
document.body.appendChild(script);
setTimeout(function() {
if (!check()) setTimeout(arguments.callee, 100);
else next();
}, 100);
}
else next();
};
load('hoge.js', 'isLoaded', function(){
...
});
これすごいな。何回も書くけどamachang天才だと思う
解読する
2行目からしてわけわからん。
check = new Function('return !!(' + check + ')');
checkの中身をそのままコード化するということかな。
でもなんで function(){} じゃなくて、new Function() なのか。typeof(x) == 'undefined'じゃなくて !! なのか。以前調べた気がするけど、忘れたなー。
ロードが完了するまでループする処理
setTimeout(function() {
if (!check()) setTimeout(arguments.callee, 100);
else next();
}, 100);
arguments.callee は呼び出した関数が入る。ということは
function() {
if (!check()) setTimeout(arguments.callee, 100);
else next();
}
この部分がそのまま入るということか。匿名関数で再帰してるのか。このパターンは見たことがる。JavaScriptすごい。
このロード完了を待つ処理は他でも応用できそうだな。こういうの「Waitパターン」とかいって、デザインパターン化したいね。
あと2行目の謎を解明したいなー