仅在匿名函数

时间:2016-11-04 18:10:46

标签: javascript anonymous-function uncaught-typeerror

我有以下代码来动画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;标签在身体的尽头。

1 个答案:

答案 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是未定义的......