2016-11-04 93 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

为什么功能减弱会改变性能?所有代码位于正文末尾的<script>标记中。

+0

你可以调试'el'和输出是什么? – jdmdevdotnet

+0

没有值从'fadeAndSlideIn'返回 – guest271314

+0

我怀疑这是你做的唯一的改变。 –

回答

2

JS已经自动分号插入。这不是很聪明,因为有时候引擎不能这样做,你会产生错误。因此请务必使用分号:

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

在你的代码,因为饰演Felix克林说,它认为它的IIFE发动机出现故障:

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

因此,实际上它通过你的IIFE到fadeInSlide为E1和你的函数的el.style是未定义的...

+0

哎呦,我错过了!谢谢 –

+1

*“有时引擎不能这么做”*它不会“失败”。 ASI根本不适用。有明确的规则,如果你不知道规则,不要依赖ASI :) –