函数式编程——为什么这个javascript闭包不能工作?
functional programming - Why doesn't this javascript closure work?
我有这段代码,我想用它来动态创建元素,但它不起作用:
make = {};
elements = ['a', 'div', 'span', 'form', 'h1', 'h2', 'h3', 'h4'];
elements.forEach(function(element){
make[element] = function() {
document.createElement(element);
}
})
但是,当我这样做时:
var h1 = make.h1();
我得到undefined…有人能解释为什么我传递给createElement函数的元素参数不起作用吗?我检查了这个干燥和调试,我注意到make对象具有所有正确的属性和相应的函数,但是createElement函数似乎没有保留我要传递的元素的正确值。
免责声明:我知道我可以使用大量的库,但我这样做是为了学习和理解目的。感谢任何花时间给我解释的人。:]
您只是缺少一个返回语句:
return document.createElement(element);
这是一个更实用的方法
let elements = ['a', 'div', 'span', 'form', 'h1', 'h2', 'h3', 'h4']
let make = elements.reduce((acc, elem) =>
Object.assign(acc, { [elem]: document.createElement(elem) }), {})
console.log(make)
输出{
"a": <a></a>,
"div": <div></div>,
"span": <span></span>,
"form": <form></form>,
"h1": <h1></h1>,
"h2": <h2></h2>,
"h3": <h3></h3>,
"h4": <h4></h4>
}
因为它是一个传递数组并返回数组的函数,我认为数组。地图是最合适的。请看下面的代码:
elements = ['a', 'div', 'span', 'form', 'h1', 'h2', 'h3', 'h4'];
const make = elements.map(function(element){
return document.createElement(element);
})
相关文章:
- 使变量可用于不带闭包的异步调用
- 包括外部javascript;不遵守闭包用法
- 不能使用闭包作为pushState的事件侦听器
- 为什么JavaScript闭包不能与预定义的函数一起使用
- Javascript - 错误..不是闭包中的函数
- JQuery 访问单击的元素而不使用闭包
- 绑定函数而不是闭包以注入额外的参数
- Javascript-can'我不理解闭包
- 不能将事件传递给addEventListener:闭包问题
- 量角器:不能访问父函数定义的闭包中的变量
- JavaScript自调用函数闭包不能正常工作
- 闭包不能返回值
- 如何在承诺链中继承数据而不创建闭包
- 如何在javascript中扩展抽象类,并为闭包编译器进行注释,但不使用闭包库
- 对于循环和动画,不能使用变量,因为由于闭包而改变
- 不理解闭包函数是如何工作的
- 显式地将变量作用域设置在函数内而不是闭包内
- Jquery document.ready()客户端实现不是闭包
- 私有成员(使用闭包),为什么初始化后添加的函数不能访问私有成员?
- 函数.toString()不尊重闭包范围