JS如何将函数内的date值传递到外部设为全局变量供下游代码调用
问题原因
- 变量作用域问题:你当前代码中
date直接在回调函数内部赋值,没有在外部提前声明,默认属于函数内部的局部变量(就算生成隐式全局变量也属于不规范写法),外部默认无法直接访问。 - 执行时序问题:
$('.fakelink').on('change', ...)绑定的回调函数,只会在.fakelink元素的change事件触发时才会执行,而外部的console.log(date)会在页面加载到对应代码行时立即执行,此时回调函数还未运行,date还没完成赋值,自然拿不到值。
解决方案
最适合新手的实现方式如下:
// 1. 先在全局作用域提前声明date变量,设置初始值 let date = ''; // 2. 绑定change事件 $('.fakelink').on('change', function () { // 给外部的date变量赋值,测试场景可以直接写死为 date = '2010-01-24' date = $(this).val(); // 3. 赋值完成后调用需要使用date的后续逻辑函数 processDate(); }); // 4. 所有需要用到date的代码都封装到这个函数里 function processDate() { console.log(date); // 此处可以正常拿到赋值后的date值 // 后续其他需要使用date的代码都写在这里即可 }
注意事项
- 不要直接省略变量声明直接写
date = xxx,这种隐式全局变量的写法不规范,严格模式下会直接报错。 - 所有依赖
date的逻辑必须放在事件触发后执行的函数里,不要尝试在事件回调外的顶层代码同步读取date的值,只要change事件没触发,date永远是初始值。
内容的提问来源于stack exchange,提问作者Смирновски
相关产品推荐
相关产品推荐

