JS -- 私有栈内存中的变量处理

131 阅读1分钟

执行函数时,会开辟一个新的空间即私有栈内存。私有栈内存在执行代码前,会进行私有作用域中的变量提升以及给形参赋值的操作

  • var a = 10, b = 20 => var a = 10; var b = 20;
  • var a = b = 10 => var a = 10, b = 10,b不带var
console.log(a, b)  //undefined, undefined
var a = 12,
  b = 12

function fn() {
  console.log(a, b)  //undefined, 12。b没有var,所有fn中没有b这个变量,b会读取全局作用域中的值,为12.
  var a = b = 13  //执行b = 13, 修改了全局作用域中的b
  console.log(a, b)  //13, 13
}
fn()
console.log(a, b)  //12, 13
console.log(a, b, c)  //undefined, undefined, undefined
var a = 12,
  b = 13,
  c = 14

function fn(a) { //在私有作用域中,执行代码前,会先执行变量提升&形参赋值,a = 10。形参a是私有变量
  console.log(a, b, c) // 10, 13, 14.  fn中没有b、c,读取的是全局作用域的值
  a = 100   //修改fn中私有作用域中的a
  c = 200   //修改全局作用域中的c
  console.log(a, b, c)  //100, 13, 200
}
b = fn(10) //fn没有返回值,所以b = undefined
console.log(a, b, c)  //12, undefined, 200