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

标签 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> 中的数字不改变,仅显示变量的第一个值

    $(window).on("scroll", parallax(0.5));
    function parallax(medida){
    var scrollSize=$(window).scrollTop();
    var scrollParallax=Number(scrollSize*medida);
    $("p").text(scrollParallax);
    }
    

有什么区别?

为什么会发生这种情况?

最佳答案

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

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

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

请参阅下面的代码片段中的差异。

  • 函数使用视差并且有效,
  • 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>

关于javascript - 为什么如果我使用函数参数而不是固定值,效果会有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32621821/

相关文章:

javascript - React中post请求成功后重定向的正确方法是什么?

javascript - 从渲染器到主的 Electron 调用

JavaScript - prompt() 中的多行文本框?

javascript - if else 条件使用类名

jquery - 为什么 JQuery $.grep() 不能与选择器一起使用?

javascript - Bootstrap - 'data-original-title=' 在我尝试创建工具提示时显示为灰色

javascript - 使用 jQuery 将 XML 解析为表

javascript - 如何在mvc3中执行操作而不更改当前页面

javascript - 通过将输入框放在 td 上使表格单元格可编辑

javascript - 我的 Jquery 变量无法识别内部的其他变量