3

私は別のjavascriptファイルに存在する関数を「更新」する必要がある立場にいます。ファイルは次のようになります。

function jf(){
    alert('1');
}

//call jf periodically
 jf();   

後にロードされる2番目のjsファイルは次のようになります。

console.log(jf);
console.log(window.jf);
var func=function(){
  alert('2');  
};
jf=func;
window.jf=func;

最初のログは元のjfメソッドを正常に返しますが、2番目のログは返しません。最初のセットはローカル変数jfを設定しているようで、2番目のセットは基本的に何もしません。この機能を実現する方法はありますか?

4

2 に答える 2

2

Javascriptクロージャによると-グローバルスコープからオーバーライドされた関数の動作

var done =function done基本的に同じことをします。それらは、内側のスコープで外側の定義をシャドウしますが、外側のスコープでそれを置き換えることはありません。

function jf()これは、同じ実行コンテキストにいる場合にのみ、最初の定義をオーバーライドできることを意味します。それ以外の場合はfunction jf(){ ...window.jf = function(){...

また、インスペクターコンソールでテストを実行すると役立つ場合があります。

于 2012-07-11T04:17:14.820 に答える
1

まず、変数を使用します。

var jf = function () {
    alert('1');
};

jf();

次に、2番目のビットが正常に機能するはずです。

var func = function () {
    alert('2');
};

jf = func;
jf();
于 2012-07-11T04:07:49.613 に答える