匿名函数与相同的命名函数

时间:2015-04-09 20:50:43

标签: javascript jquery

我在写一些我的第一个JQuery代码时遇到了问题。我正在尝试一些Codecademy的东西,只是搞乱并看看它是如何工作的。现在我对匿名函数的问题非常困惑:匿名调用函数但是命名函数并且按名称调用它不会。代码应该在点击图标时从屏幕左侧打开一个菜单,并将页面的其余部分向右移动;然后单击关闭图标执行相反操作。第一个代码块工作正常,第二个代码块在页面加载后立即打开并关闭菜单,然后什么都不做。关于JS / JQuery中的操作顺序还有什么我缺少的东西?

匿名:

function main() {
  $('.icon-menu').click(function() {
    $('.menu').animate({left:'0px'}, 200);
    $('body').animate({left:'285px'}, 200);
  });
  $('.icon-close').click(function() {
    $('.menu').animate({left:'-285px'}, 200);
    $('body').animate({left:'0px'}, 200);
  });
}

命名:

function main() {
  $('.icon-menu').click(open());
  $('.icon-close').click(close());
}

function open() {
  $('.menu').animate({left:'0px'}, 200);
  $('body').animate({left:'285px'}, 200);
}
function close() {
  $('.menu').animate({left:'-285px'}, 200);
  $('body').animate({left:'0px'}, 200);
}

感谢任何能够启发我的人。

3 个答案:

答案 0 :(得分:1)

你有

$('.icon-menu').click(open());

()调用一个函数。

您立即致电open ,然后将其返回值(undefined)传递给click

删除()并改为传递函数。

答案 1 :(得分:1)

删除括号。 open()close()调用函数,但您只想传递对函数的引用。

function main() {
  $('.icon-menu').click(open);
  $('.icon-close').click(close);
}

答案 2 :(得分:0)

在clickhandler中的函数之后删除括号,因为您正在使用此语法执行它们。