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