1
すぐに呼び出された関数式でjsコードをラップした後に何らかの理由でprogressBar not defined
が表示されます。なぜこれが当てはまるのだろうか?関数がsetTimeoutを使用して定義されていません
(function(){
"use strict"
var progressBar = function(){
var bar = document.getElementById('pbar'),
status = document.getElementById('status'),
barValue = bar.value;
status.innerHTML = barValue + "%";
bar.value++;
var increment = setTimeout("progressBar()", 50);
if(bar.value == 100){
status.innerHTML = '100% - Straight Besting';
bar.value = '100';
clearTimeout(increment);
}
}
progressBar();
})()
、なぜそうではありますか?なぜ、関数がsetTimoutの最初の引数に文字列として渡されたのですか?スコープではなくグローバルのコンテキストで呼び出されますか? –
'setTimeout'は実際には' window.setTimeout'です。文字列を渡すと、 'eval'と同じように、実際には" code "の文字列を渡して実行します。 「コード」にはコンテキスト情報は含まれていません。 – noahnu