[英]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();
我無法定義...誰能解釋為什么我傳遞給createElement函數的元素參數不起作用? 我檢查了一下以進行干燥和調試,然后發現make對象具有所有正確的屬性和相應的功能,但是createElement函數似乎並未保留我要傳遞的元素的正確值。
免責聲明:我知道我可以使用大量的庫,但是我這樣做是出於學習和理解的目的。 多謝您抽出一些時間向我解釋這個問題。 :]
您只是缺少一個return語句 :
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>
}
因為它是一個傳遞數組並返回數組的函數,所以我認為Array.map是最合適的。 參見下面的代碼:
elements = ['a', 'div', 'span', 'form', 'h1', 'h2', 'h3', 'h4'];
const make = elements.map(function(element){
return document.createElement(element);
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.