You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用.apply能否读取回调函数入参实时值?参数undefined原因排查

问题根源

  • 第一处错误是apply方法的用法不符合规范:Function.prototype.apply()的第二个入参要求是参数数组/类数组对象,你传入的tempVariable是普通键值对象,apply会尝试按数字索引拆分该对象的属性作为单独参数传给回调,相当于实际执行的是callBackFunction(tempVariable[0], tempVariable[1], ...),而你的对象没有0、1这类数字键,因此回调拿到的第一个参数自然为undefined。
  • 第二处错误是回调函数的属性取值逻辑错误:就算后续正确把对象传入回调,你用数字索引param[i]取普通对象的属性也会返回undefined,因为你的对象键是item1~item5,不是数字下标。
  • 额外注意:如果没有先点击Bind Events按钮给全局tempVariable赋值,对象会为空,就算逻辑正确也不会有输出内容。

修复方案

  1. 修改Dynamic.js中的回调调用逻辑,两种方案二选一即可:

    • 方案1:改用call方法传递单个参数
    var testMe = function (properties) {
        $(document).ready(function () {
            $(document).on('click', '#okButton', function () {                
                properties.okButtonCallback.call(this, properties.okButtonCallbackParameters); 
            });
        });
    };
    
    • 方案2:把参数包裹为数组后再用apply调用
    properties.okButtonCallback.apply(this, [properties.okButtonCallbackParameters]);
    
  2. 修改回调函数的遍历逻辑,按对象的键取值:

function callBackFunction(param) {
    var keys = Object.keys(param);
    var size = keys.length;
    if (size > 0) {
        for (var i = 0; i < size; i++) {
            var currentKey = keys[i];
            alert((i + 1) + ' parameter value: ' + param[currentKey]);
        }
    }
}

内容的提问来源于stack exchange,提问作者sunil20000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:57:03