js的if会形成作用域吗?

问题遇到的现象和发生背景

为什么if(){return}里面return了以后,后面的代码也不会执行了呢?
是因为if 没有形成作用域吗?所以在里面return 其实和在外面return是一个结果

问题相关代码,请勿粘贴截图
fs.readFile('./成绩.txt',(err,data) => {
  if (err) {
    console.log(err.message)
    return
  } else {

    //console.log('数据:'+ data);
    // 到这里读取文件成功,往下是处理数据
    
    // 4.1 先把处理的数据, 按照空格进行分割成数组
    const arr = data.toString().split(' ')
    
    // 4.2 循环分割后的数组,对每一项数据,进行字符串的替换操作
    const newArr = []
    for (let i = 0;i < arr.length; i++) {
      newArr[i] = arr[i].replace('=',': ')
    }
    // 4.3 把新数组中的每一项,进行合并,得到一个新的字符串
    const newData = newArr.join('\n')
    fs.writeFile('./成绩-ok.txt',newData,(err) => {
      if (err) {
        console.log('写入失败'+err.message)
      } else {
        console.log('写入成功!');
      }
    })
  }
})

这样我能理解,下面这个我就理解不了了

fs.readFile('./成绩1.txt',(err,data) => {
  if (err) {
    console.log(err.message)
    return
  }

  //console.log('数据:'+ data);
  // 到这里读取文件成功,往下是处理数据
  
  // 4.1 先把处理的数据, 按照空格进行分割成数组
  const arr = data.toString().split(' ')
  
  // 4.2 循环分割后的数组,对每一项数据,进行字符串的替换操作
  const newArr = []
  for (let i = 0;i < arr.length; i++) {
    newArr[i] = arr[i].replace('=',': ')
  }
  // 4.3 把新数组中的每一项,进行合并,得到一个新的字符串
  const newData = newArr.join('\n')
  fs.writeFile('./成绩-ok.txt',newData,(err) => {
    if (err) {
      console.log('写入失败'+err.message)
    } else {
      console.log('写入成功!');
    }
  })
})

我没看上面出来两个差别,就一句话,只要运行到return,这个函数就结束了,其实你的代码等于


fs.readFile('./成绩1.txt',(err,data) => {
  if (err) {
    console.log(err.message)
    return
  }
 
  //console.log('数据:'+ data);
  // 到这里读取文件成功,往下是处理数据
  
  // 4.1 先把处理的数据, 按照空格进行分割成数组
  const arr = data.toString().split(' ')
  
  // 4.2 循环分割后的数组,对每一项数据,进行字符串的替换操作
  const newArr = []
  for (let i = 0;i < arr.length; i++) {
    newArr[i] = arr[i].replace('=',': ')
  }
  // 4.3 把新数组中的每一项,进行合并,得到一个新的字符串
  const newData = newArr.join('\n')
  fs.writeFile('./成绩-ok.txt',newData,(err) => {
    if (err) {
      console.log('写入失败'+err.message)
    } else {
      console.log('写入成功!');
    }
  })

return;//只不过你没有返回值,就不用写了,编译器替我们做了很多事情的
})

有用的话采纳一下

return有两种用法,单独在方法里有return会结束该方法的执行

return 就跳出了 就结束了 return下面的代码就不会执行了

你可以理解为,return为结束,但是他结束是针对一个函数。