gpt4 book ai didi

javascript - IE10 Javascript "Function Expected"

转载 作者:行者123 更新时间:2023-12-03 17:21:46 25 4
gpt4 key购买 nike

这段代码给我一个 SCRIPT5002: Function expected 错误:

var callIt = function(func) { func(); }

为什么!?就好像它在尝试做类型检查什么的

编辑:用例

var callIt = function(func) { func(); }
function nextSlide() {
var fn = currSlide ? currSlide.hide : callIt;
currSlide = setupSlides[++slideIdx];
fn(currSlide.show());
}

卫生部!

最佳答案

您的代码:

fn(currSlide.show());

...调用 currSlide.show() 并将调用它的返回值传递给 fn,与 完全一样foo(bar()) 调用 bar 并将其返回值传递给 foo

因为 show 的返回值不是一个函数,所以你会得到错误。您的意思可能是:

fn(function() { currSlide.show(); });

不过请注意,这里有一个问题:

var fn = currSlide ? currSlide.hide : callIt;

如果 currSlide 为真,您将获得对 hide 函数的引用,但该函数以任何方式连接到currSlide。如果您稍后调用它,它很可能会失败,因为它期望 this 具有特定的含义。

如果您可以依赖 ECMAScript5 的功能(因此,您使用的是 IE8 以外的现代浏览器和/或您包含“es5 shim”,您可以使用 Function#bind 修复它:

var fn = currSlide ? currSlide.hide.bind(currSlide) : callIt;

或者,如果您使用的是 jQuery,则可以使用 jQuery 的 $.proxy 修复它:

var fn = currSlide ? $.proxy(currSlide.hide, currSlide) : callIt;

这两个函数都返回一个新函数,调用时将使用给定的 this 值调用目标函数。

如果您不使用 ES5 或 jQuery,那么,这样做就可以了:

var prevSlide = currSlide;
var fn = prevSlide ? function(func) { prevSlide.hide(func); } : callIt;

...但在这一点上,我怀疑退后一步并重新评估可能是合适的。

关于javascript - IE10 Javascript "Function Expected",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20192198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com