为什么不是't此函数用于修改最终输出

Why isn't this function modifying the final output?

本文关键字:修改 用于 输出 函数 为什么不      更新时间:2023-09-26

我正在做一些简单的事情:读取一个文件,替换一个字符,并输出修改后的内容:

#!/usr/bin/env node
var fs = require('fs')
  , filename = process.argv[2]
if (process.argv.length < 3) {
  console.log('Usage: node ' + process.argv[1] + ' FILENAME')
  process.exit(1)
}
function replaceCharacters(data) {
  data = data
    .replace(/"(?='b|'*|')/g, '“')
  console.log(data)
}
function saveHtml(data) {
  fs.writeFile("untitled.html", data, function(err) {
    if (err)
      console.log(err)
    else
      console.log(data)
  })
}
fs.readFile(filename, 'utf8', function(err, data) {
  if (err) throw err
  replaceCharacters(data)
  saveHtml(data)
})

问题是,replaceCharacters不会影响最终输出。我的开场白不是卷曲的,而是直白的。

我做错了什么?

(如果a将内容从replaceCharacters移动到fs.readFile,则引号会替换)。

编辑:

函数console.log(data)内部的值确实发生了变化,用大引号输出数据。

它正在替换它们,但从来没有返回它所替换的东西:

function replaceCharacters(data) {
  data = data
    .replace(/"(?='b|'*|')/g, '“')
  console.log(data)
  return data; // <====
}

然后当你使用它时:

    data = replaceCharacters(data)
//  ^^^^^^^

正如您所知,replace创建了一个带有替换项的字符串,它不会在适当的位置更新该字符串。(不能,JavaScript中的字符串是不可变的。)在replaceCharacters函数中,使用结果更新data参数,但这不会更改调用replaceCharacters时使用的变量,只是函数调用中的参数。因此,正如您必须在您的replaceCharacters函数中写入data = data.replace(...)一样,您也必须从replaceCharacters函数返回结果并使用该返回值。