为什么以下的计数器没有增加?

时间:2015-05-06 13:08:02

标签: javascript ecmascript-6

正如您所看到的,我在createContents中创建了一个计数器,并将其与传递给convertToHTML的数据一起使用:

function createContents(text, orig) {
  if (orig.match(/^#{2}\s/)) {
    let index = 1
      , headingIndex = `item-${index++}`
      , headingText = `${text.replace(/^## /gm, '')}`

    text = `<p><a href=#${headingIndex}>${headingText}</p>`
    console.log(text)
  }
}

function convertToHTML(markdownSource) {
  let data = markdownSource.split(/\n\n|^>(?!.)/gm)
    , orig = data.slice()

  for (let i = 0, l = orig.length; i < l; ++i) {
    createContents(data[i], orig[i])
  }
}

输入如下:

## Title 1

## Title 2

所需的输出应如下所示:

<p><a href=#item-1>Title 1</p>
<p><a href=#item-2>Title 2</p>

但我得到了这个:

<p><a href=#item-1>Title 1</p>
<p><a href=#item-1>Title 2</p>

我做错了什么?我该如何解决它?

1 个答案:

答案 0 :(得分:5)

问题是您的index变量是局部变量,并且仅限于if语句的范围。您应该像这样定义index

var index_counter = 1;
function createContents(text, orig) {
  if (orig.match(/^#{2}\s/)) {
    let headingIndex = `item-${index_counter++}`
      , headingText = `${text.replace(/^## /gm, '')}`

    text = `<p><a href=#${headingIndex}>${headingText}</p>`
    console.log(text)
  }
}

function convertToHTML(markdownSource) {
  let data = markdownSource.split(/\n\n|^>(?!.)/gm)
    , orig = data.slice()

  for (let i = 0, l = orig.length; i < l; ++i) {
    createContents(data[i], orig[i])
  }
}
  

let允许您声明范围有限的变量   使用它的块,语句或表达式。这与此不同   var关键字,它全局定义变量,或者本地定义变量   整个函数,无论块范围如何。