簡體   English   中英

為什么此javascript閉包無效?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM