仅在匿名函数中出现 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 传递给 fadeInSlide,并且您的函数的 el.style 未定义...
我有以下代码来为 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 传递给 fadeInSlide,并且您的函数的 el.style 未定义...