2016-11-04 10 views
0

divをアニメーション化する次のコードがあります。それは完璧に動作します:匿名関数でのみUncaughtTypeエラー

function fadeAndSlideIn(el,m,t) { 
    el.style.opacity = 0; 
    el.style.marginTop = 0; 

    var oi = 1/(t * 60); 
    var mi = m/(t * 60); 

    var tick = function() { 
     el.style.opacity = +el.style.opacity + oi; 
     el.style.marginTop = (parseInt(el.style.marginTop) + mi) + 'px'; 

     if (+el.style.opacity < 1) 
      (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16); 
    } 

    tick(); 
} 

(function() { 
    fadeAndSlideIn(document.getElementById('pan1'),125,1); 
    setTimeout(function() { 
     fadeAndSlideIn(document.getElementById('pan2'),125,1); 
    },500); 
    setTimeout(function() { 
     fadeAndSlideIn(document.getElementById('pan3'),125,1); 
    },1000); 
})(); 

しかし、私はこのような無名関数にfadeAndSlideIn機能を変更する場合:

var fadeAndSlideIn = function(el,m,t) { 

Uncaught TypeError: Cannot set property 'opacity' of undefined

を私のプログラムが動作しないと、私は次のエラーを取得しますなぜ関数declerationはパフォーマンスを変更するのですか?すべてのコードは、本文の末尾にある<scriptタグにあります。

+0

'el'をデバッグすることはできますか? – jdmdevdotnet

+0

'fadeAndSlideIn'から返される値はありません – guest271314

+0

これは唯一の変更だと思います。 –

答えて

2

JSに自動セミコロンの挿入があります。これは巧妙ではない場合があります。だから、常にセミコロンを使用します。あなたのコードで

var a=function(){} //bad 
var a=function(){}; //good 

エンジンが故障したフェリックスクリングが言ったように、それはその生命維持を考えているので:

var a=function(){} 
(some other code); 

だから、実際にはエルようfadeInSlideにあなたの生命維持を渡し、あなたの関数のel.styleは定義されていません...

+0

私はそれを逃した!ありがとうございます –

+1

* "時々エンジンが失敗する" *失敗しません。 ASIは単に適用されません。ルールはよく定義されていますが、ルールがわからない場合はASIに依存しないでください:) –