为什么';这个javascript闭包不管用吗?

为什么';这个javascript闭包不管用吗?,javascript,functional-programming,closures,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

所以我这里有一段代码,我想用来动态生成元素,但它不起作用:

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函数似乎没有保留我要传递的元素的正确值

免责声明:我知道我可以使用大量的库,但我这样做是为了学习和理解。感谢所有花时间向我解释这一点的人。:]

您只是缺少了一个:

你只是错过了一个:


这是一种更实用的方法

let元素=['a',div',span',form',h1',h2',h3',h4']
让make=元素。减少((acc,elem)=>
assign(acc,{[elem]:document.createElement(elem)}),{})

console.log(make)
这是一种更实用的方法

let元素=['a',div',span',form',h1',h2',h3',h4']
让make=元素。减少((acc,elem)=>
assign(acc,{[elem]:document.createElement(elem)}),{})

console.log(make)
因为它是一个传递数组并返回数组的函数,所以我认为array.map最合适。请参阅下面的代码:

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

因为它是一个传递数组并返回数组的函数,所以我认为array.map最合适。请参阅下面的代码:

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

哇,谢谢你。我之所以没有想到这一点,是因为我遵循的指令说明createElement函数创建并返回一个元素。我没有意识到我还必须返回那个元素。现在我觉得自己很傻,但是非常感谢你@不客气。它确实返回元素,但只返回调用它的函数,而不返回最初调用该元素的函数。JavaScript中没有从调用位置返回的函数(它们返回到调用位置,但不是从调用位置返回)。哇,谢谢。我之所以没有想到这一点,是因为我遵循的指令说明createElement函数创建并返回一个元素。我没有意识到我还必须返回那个元素。现在我觉得自己很傻,但是非常感谢你@不客气。它确实返回元素,但只返回调用它的函数,而不返回最初调用该元素的函数。JavaScript中没有从调用位置返回的函数(它们返回到调用位置,但不是从调用位置返回)。它不应该返回arraySorry,这是一个错误。在这种情况下,必须使用reduce。它不应该返回arraySorry,而是犯了一个错误。在这种情况下,必须使用reduce。