JavaScript 函数参数的关闭,取决于函数作为参数传递的方式,我看到两种不同的结果
Closure of JavaScript function parameters, depending on how a function is passed as a parameter I see two different outcomes
我相信我 运行 在将函数作为我的函数的参数传递时遇到了闭包问题。我包括了两个我不太确定会给出不同结果的片段
文件顶部:
let printPizza = () => console.log('pizza')
function closureQuestion(fn) {
printPizza = () => console.log('hamburger')
fn()
}
这些必须 运行 按顺序排列,否则 printPizza 会发生变异并且必须重新定义
closureQuestion(printPizza)
^ 记录披萨(不知道为什么)
closureQuestion(() => printPizza())
^ 记录汉堡包
任何帮助将不胜感激,我已经通读了几个闭包示例(只是猜测我正在 运行 进入的内容)但我不理解。
在第一个版本中,您在调用该函数之前printPizza
获得了值。参数fn
设置为printPizza
的原始值,重新赋值变量对参数没有影响。这与做没有什么不同:
let printPizza = 1;
let fn = printPizza;
printPizza = 2;
console.log(fn); // this will log 1, not 2
在第二个版本中,在执行回调函数之前不会计算 printPizza
,因此它将使用变量的最新值。
我相信我 运行 在将函数作为我的函数的参数传递时遇到了闭包问题。我包括了两个我不太确定会给出不同结果的片段
文件顶部:
let printPizza = () => console.log('pizza')
function closureQuestion(fn) {
printPizza = () => console.log('hamburger')
fn()
}
这些必须 运行 按顺序排列,否则 printPizza 会发生变异并且必须重新定义
closureQuestion(printPizza)
^ 记录披萨(不知道为什么)
closureQuestion(() => printPizza())
^ 记录汉堡包
任何帮助将不胜感激,我已经通读了几个闭包示例(只是猜测我正在 运行 进入的内容)但我不理解。
在第一个版本中,您在调用该函数之前printPizza
获得了值。参数fn
设置为printPizza
的原始值,重新赋值变量对参数没有影响。这与做没有什么不同:
let printPizza = 1;
let fn = printPizza;
printPizza = 2;
console.log(fn); // this will log 1, not 2
在第二个版本中,在执行回调函数之前不会计算 printPizza
,因此它将使用变量的最新值。