S eda1a14b50ee24bcab19b62f40858e76 JavaScript動的スクリプトローディング

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行目の謎を解明したいなー

もしかして

    他の人の「JavaScript動的スクリプトローディング」

    S eda1a14b50ee24bcab19b62f40858e76

    無所属ソフトウェアエンジニア

    (1722words)

    最新

      最新エントリ

        関連ツイート