使用"for in"循环设置方法时,会设置正确的方法名称,但每个函数调用中使用的变量都会被最后一个set属性破坏.
示例代码
function colorLog() {
var color = {
graph: '#88A825',
node: '#35203B',
link: '#911146',
error: '#AC2930',
info: 'black'
};
var logger = {};
for(var k in color) {
logger[k] = function(msg) {
console.log(color[k]);
console.log("%c" + msg, "color:" + color[k] + ";font-weight:bold;");
}
}
return logger;
}
var log = colorLog();
log.graph("Graph Says");
log.node("Node Says");
log.link("Link Says");
log.error("Error Says");
log.info("Info Says");
Run Code Online (Sandbox Code Playgroud)
产量
black
Graph Says
black
Node Says
black
Link Says
black
Error Says
black
Info Says
Run Code Online (Sandbox Code Playgroud)
关于范围规则,我不理解什么?
每个闭包都是相同的,k所以在定义了所有函数后,它指向最后一个键color.解决它的最简单方法是使用自执行函数创建一个新方法:
for(var k in color) {
logger[k] = (function(k) {
return function(msg) {
console.log(color[k]);
console.log("%c" + msg, "color:" + color[k] + ";font-weight:bold;");
};
})(k);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |