为什么这个javascript封闭不起作用?

时间:2016-08-16 00:47:59

标签: javascript functional-programming closures

所以我在这里有这个代码,我想用来动态制作元素,但它不起作用:

make = {};
elements = ['a', 'div', 'span', 'form', 'h1', 'h2', 'h3', 'h4'];
elements.forEach(function(element){
    make[element] = function() {
        document.createElement(element);
    }
})

然而,当我这样做时:

var h1 = make.h1();

我得到了未定义的...有人可以解释为什么我传递给createElement函数的元素参数不起作用吗?我检查了这个干并调试,我注意到make对象具有所有正确的属性和相应的函数,但是createElement函数似乎没有保留我想要传递的元素的正确值。

免责声明:我知道我可以使用大量的图书馆,但我这样做是为了学习和理解目的。感谢任何需要一些时间向我解释的人。 :

1 个答案:

答案 0 :(得分:2)

这是一种更实用的方法

import pymysql

conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='', db='mysql')

输出

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)
相关问题