我有以下代码来动画div。它完美地运作:
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) {
我的程序不起作用,我收到以下错误
未捕获的TypeError:无法设置未定义的属性“opacity”
为什么函数decleration会改变性能?所有代码都在<script
&gt;标签在身体的尽头。
答案 0 :(得分:2)
JS有自动分号插入。这并不聪明,因为有时发动机不能这样做并且你会产生错误。所以总是使用分号:
var a=function(){} //bad
var a=function(){}; //good
在您的代码中引擎失败,因为正如Felix Kling所说,它认为它是IIFE:
var a=function(){}
(some other code);
所以实际上它将你的IIFE传递给fadeInSlide作为el,你的函数的el.style是未定义的......