仅在匿名函数中出现 UncaughtType 错误

UncaughtType error only in anonymous function

我有以下代码来为 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) {

我的程序无法运行,出现以下错误

Uncaught TypeError: Cannot set property 'opacity' of undefined

为什么函数减速会改变性能?所有代码都在正文末尾的 <script> 标记中。

JS 有自动分号插入功能。这并不聪明,因为有时引擎无法这样做并且您正在产生错误。所以总是使用分号:

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

在你的代码中,引擎失败了,因为正如 Felix Kling 所说,它认为它是一个 IIFE:

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

所以实际上它将您的 IIFE 作为 el 传递给 fad​​eInSlide,并且您的函数的 el.style 未定义...