javascript - 函数声明后如何分配 JavaScript 变量?

标签 javascript

这个问题在这里已经有了答案:





Why does block assigned value change global variable? [duplicate]

(4 个回答)


1年前关闭。




下面的代码记录值 a作业后

var a = []
if (true) {
  a = 1
  function a() {}
  a = 2
  function a() {}
  a = 3
  console.log('0: ', a)
}
console.log('1: ', a)

我怀疑输出可能是:
0:  3
1:  3
但实际上上面的代码记录了
0:  3
1:  2
为什么?

最佳答案

我的理解是,有两个“a”变量。
一个是全局的,一个在括号范围内。
在第一次分配中,您将其分配给全局。
当您声明“a”函数时。它具有本地范围。
它将“a”中的当前值分配给全局值。
然后,当您再次为“a”分配一个值时,它会将其分配给本地范围变量。
出于某种原因,重新声明函数名称会使其将局部变量的值分配给全局变量。不知道为什么。

var a = [] // assigns to global

if (true) {
  a = 1 // assigns to global
  function a() {} // pushes value to global and creates a local "a" variable
  a = 2  // assigns to local
  function a() {} // pushes value to global
  a = 3  // assigns to local
  console.log('0: ', a) // outputs the local varaible
}
console.log('1: ', a)  // outputs the last pushed global which is 2

关于javascript - 函数声明后如何分配 JavaScript 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65104172/

相关文章:

javascript - 如何在 React Native 中制作带有钩子(Hook)的无限图像轮播

javascript - 如何在多个正则表达式中重用通用模式?

javascript - Chart.js - 如何设置动画速度?

javascript - range.setStart 仅使用字符偏移量?

javascript - 如何构建包含可选数据的 Recurly.js 信用卡表单

javascript - 更改宽度并将其保存到本地存储

javascript - 如何将值应用于 JavaScript 中所有组合的模式?

javascript - 如何识别数据集中的断点(趋势线边缘)?

javascript - 需要使用 Browserify 和 browserify-rails 的 sprockets 预处理文件

javascript - 如何在D3中获得完整的顺时针旋转