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

JS:如何让函数捕获变量值而非变量引用以得到不同结果

问题描述

我写了一段简易代码,原本希望两个函数返回不同结果,但因为全局变量precision是以引用形式被调用的,最终两个函数得到了相同的结果:

precision = 4
func = (value) => value.toFixed(precision)
precision = 2
func2 = (value) => value.toFixed(precision)
console.log(func(2.3333)) // 输出2.33而非预期的2.3333
console.log(func2(2.3333)) // 输出2.33

请问如何让函数使用定义时precision的变量值而非变量本身,使两个函数返回不同结果?

解决方法

可以通过以下几种方式让函数捕获定义时的precision值,而非引用全局变量:

方法1:利用闭包创建工厂函数

写一个生成处理函数的工厂函数,每次传入指定的精度值,让返回的函数绑定该值:

function createFormatter(precision) {
  return (value) => value.toFixed(precision)
}

const func = createFormatter(4)
const func2 = createFormatter(2)

console.log(func(2.3333)) // 2.3333
console.log(func2(2.3333)) // 2.33

方法2:用函数默认参数捕获当前值

在定义箭头函数时,把precision作为默认参数传入,这样函数会保存定义时的数值:

let precision = 4
const func = (value, p = precision) => value.toFixed(p)
precision = 2
const func2 = (value, p = precision) => value.toFixed(p)

console.log(func(2.3333)) // 2.3333
console.log(func2(2.3333)) // 2.33

方法3:立即执行函数表达式(IIFE)

通过立即执行函数把当前的precision值封装到函数的作用域里:

let precision = 4
const func = ((p) => (value) => value.toFixed(p))(precision)
precision = 2
const func2 = ((p) => (value) => value.toFixed(p))(precision)

console.log(func(2.3333)) // 2.3333
console.log(func2(2.3333)) // 2.33

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:13:20