javascript - javascript输出中的箭头函数?
问题描述
我正在学习 js 中的箭头函数,在那里我发现了一个问题
console.log((function(x, f = () => x) {
var x;
var y = x;
x = 2;
return [x, y, f()];
})(1));
它的输出是2,1,1
,但它应该是1,1,1
。
谁能解释一下?
解决方案
这是重新编写的函数以显示正在发生的事情。
main
需要x
=1
defaultFunction
返回原始x
=1
resultFn
main
是一个在它内部被调用的函数x
y
被分配了x
一直向下传递的(本地范围)1
x
被重新分配到2
- 结果是
2, 1, 1
这是关于变量/参数范围的练习。
const main = (x) => { // x = 1
const defaultFn = () => x; // x = 1
const resultFn = (x, f = defaultFn) => { // x = 1
var x; // x is still 1
var y = x; // y = 1
x = 2; // x = 2
return [x, y, f()]; // x = 2, y = 1, f() -> 1
};
return resultFn(x); // 2, 1, 1
};
console.log(main(1));
推荐阅读
- c - 如何在非根 C 代码中运行 dracut 命令?
- python - 是否有一种基于另一个复选框的状态启用/禁用复选框的优雅方法?
- apache - 为什么/如何使用 bash 命令,例如“apt-get”和“sudo”(近乎言论自由)?
- python - 为什么这个 return 语句会在这个 python 递归函数中抛出一个错误?
- node.js - NodeJS 表单提交问题
- c# - 继承祖先前景画笔颜色的路径
- c# - 需要帮助了解 Xamarin Forms 的跨平台
- python - panda 的 to_latex() 生成的表格太宽。Longtable=True 不工作
- javascript - 打印出随后突出显示的文本,一次一个字符,显示每个字符之间有 10 毫秒的延迟
- c++ - 如何使宏处理不同类型的参数?