JavaScripts之变量作用域提升问题


备注:const、let 不存在变量提升问题

1、变量提升(Hoisting)

  使用var在函数或全局内任何地方声明变量相当于在其内部最顶上声明它,这种行为称为Hoisting(提升)

      注意:变量赋值的位置不会改变

function fn() {
   console.log(x) // -> undefined
   var x = 2  
}
// 等同于:
function fn() {
var x // 变量提升到函数最顶部
console.log(x)
x = 2 // 赋值的位置不变
}

2. 变量作用域:

    ·var 变量在函数内部声明,函数中任何位置都能够访问到,不存在 块级 作用域

    ·如果定义在函数外部,则会提升成为全局变量

    2.1>定义在函数内:

function fn() {
 console.log(a) // undefined
 console.log(x) // undefined
  var x = 3
  if(x === 3) {
    var a = 6
  }
 console.log(a) // 6
 console.log(x) // 3
}
// 等同于下方的方法
function fn() {
  var x
  var a
 console.log(a) // undefined
 console.log(x) // undefined
  x = 3
  if(x === 3){
    a = 6
  }
 console.log(a) // 6
 console.log(x) // 3
}

  2.2> var定义变量在函数外部:

// test.js
var str = 6

// text.html
// ......