如果我使用函数参数而不是固定值,为什么这会有所不同?

时间:2015-09-17 02:45:30

标签: javascript jquery

我开始使用JQuery和Javascript并进行视差滚动练习,我遇到了一个问题。

  • 每次用户滚动时,我都会在<p></p>中写入var的值。

  • 该值是滚动位置值与其他值之间的操作结果。

  • 如果我把这个最后一个值设置为函数中的固定数字,那么每次使用滚动条时它都会改变,但是如果我把这个值像函数中的参数一样,那么只有函数计算滚动的第一个动作,并将结果放在<p></p>

这是两个代码:

  1. 每次移动滚动时,<p></p>中的数字都会发生变化

    $(window).on("scroll", parallax);    
    function parallax(){
    var scrollSize=$(window).scrollTop();
    var scrollParallax=Number(scrollSize*0.5);
    $("p").text(scrollParallax);
    }
    
  2. <p></p>中的数字没有变化,只显示var的第一个值

    $(window).on("scroll", parallax(0.5));
    function parallax(medida){
    var scrollSize=$(window).scrollTop();
    var scrollParallax=Number(scrollSize*medida);
    $("p").text(scrollParallax);
    }
    
  3. 有什么区别?

    为什么会这样?

1 个答案:

答案 0 :(得分:2)

这是因为.on()期望处理程序参数的函数名或函数定义。

  

.on(events [,selector] [,data],handler)

在启动时,Javascript正在执行parallax(0.5)以找到它需要调用的函数。它找不到函数,因此它现在处于错误状态,并且事件永远不会触发。

请参阅我的代码段中的区别。

  • function使用parallax并且有效,
  • Function Result使用parallax(0.5)无法使用

$('#eventBtn').on("click", parallax);
$('#resBtn').on("click", parallax(0.5));
function parallax(medida){
alert('parallax ran' + medida)
$("p").text(new Date().getTime());
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Text</p>
<button id="eventBtn" type="button">Function</button>
<button id="resBtn" type="button">Function Result</button>