Javascript闭包显示省略结果
javascript closure show omit result
我是javascript的新手,尝试一些编码。看看这个代码片段,为什么我得到的结果是2而不是3?
var cbsample = function (cb) {
var value = 1;
console.log(value);
return cb(value)(value);
};
var myvalue = cbsample(function (value) {
value += 1;
console.log(value);
return function (value) {
console.log(value);
return value += 1;
};
});
console.log(myvalue);
当我调用回调时,它将值更改为2,但是闭包不接受这个新值(2),它接受旧值(1)。为什么?
因为闭包实际上并没有关闭value
:-)您也给了内部函数一个value
参数,这将引入一个局部变量,遮蔽外部变量。所以,不,它不取旧的(外部)值,它不取新的(外部)value
,但它取一个不同的 value
(恰好也是1
)。改为
return function (v) {
console.log("old value (from the closure):", value);
console.log("new value (the arguments):", v);
return value += v; // update closure variable and return 3
};
您也可以更改cbsample
函数中的value
变量以识别差异:-)
问题可能出在这一行:
return cb(value)(value);
您正在调用外部函数cb
和该函数的结果,该函数具有相同的参数value
,该参数当时的值为1。
var cbsample = function (cb) {
var value = 1;
console.log(value); //1
return cb(value)(value); //return cb(1)(1);
};
var myvalue = cbsample(function (value) {
value += 1;
console.log(value); //2
return function (value) { //this function will get called with 1 as argument
console.log(value);
return value += 1; //return 2
};
});
console.log(myvalue); //2
要解决这个问题,只需在函数调用和定义中删除内部返回函数的参数:
return cb(value)();
//....
return function () {
console.log(value);
return value += 1;
};
相关文章:
- 如何将JavaScript结果显示为段落
- 敲除:可观察数组没有被正确绑定——只有1个结果显示,而api返回6
- 我的localStorage结果显示了[null,null,“something”]],而不是“”;什么”;
- 将咖啡转换为javascript,并将结果显示在Emacs中的标准输出中
- json结果显示第一个值
- 我该如何在旅途中添加一些段落,并将结果显示在带有段落标记的文档中
- 如何将搜索结果显示为“搜索结果”;显示300〃中的1-10〃;
- 为什么'谷歌分析内容实验结果显示
- 如何在Meteor中将多个数据库的结果显示为列表格式
- AJAX 没有接收有关成功的数据,它将结果显示为“未定义”
- J查询结果显示问题
- 谷歌地图(它没有将结果显示到我的输入窗格中以保存到我的数据库中)
- Ajax 结果显示未定义
- 配置谷歌分析_TrackEvent,以便结果显示在基本报告中
- 如何将 2 小时添加到当前日期时间并将结果显示回日期时间
- 单击后如何获取值文本作为结果按钮的结果 显示 按钮
- 过滤结果以显示与ng匹配的结果显示angular js
- 为什么json结果显示一个属性的NaN
- JavaScript-结果显示在IE,但不是Chrome或FF
- 将PHP/MySQLi结果显示为HTML表