我试图用函数覆盖给定的javascript变量,以防它是一个字符串:
mapper = _.isString(mapper) ? function (item) { return item[mapper]; } : mapper;
但是,令人惊讶的是, mapper 仍然是给定的字符串,而不是函数!
现在,当我将上述语句中的相同rvalue分配给新的varialbe时,它的行为符合预期:
var mapFunction = _.isString(mapper) ? function (item) { return item[mapper]; } : mapper;
(我之后在代码中使用 mapFunction ,而不是 mapper )
我错过了什么?我不能将函数分配给曾经是字符串的变量吗?
答案 0 :(得分:1)
问题是mapper
函数内部不会记住原始值,它将是调用它时的新值。
所以你所拥有的是对用作索引的函数的引用。
您需要持有副本并在函数内部使用它。
var _orgMapper = mapper;
mapper = _.isString(mapper) ? function (item) { return item[_orgMapper]; } : mapper;
答案 1 :(得分:0)
这是不可能的。三元运营商不犯错误;)
var s = 's';
s = typeof s === 'string'? function () {} : s;
s; //function...
你刚才假设mapper
是一个字符串或者_.isString
是错误的,我怀疑这个错误。
注意:请参阅@epascarello回答您遇到的与闭包有关的其他问题。