var

var 声明的变量

一,声明提前(hosited)

function func() {
  // 声明提前,不会出现 ReferenceError;初始化不会提前
  console.log(tmp) // undefined
  var tmp = 123
  console.log(tmp) // 123
}

// 相当于
function func() {
  var tmp
  console.log(tmp) // undefined
  tmp = 123
  console.log(tmp) // 123
}

二,没有块作用域(块语句没有作用域)

function func() {
  if (true) {
    var tmp = 123
  }
  console.log(tmp) // 123
}

三,在同一作用域内可以重复声明。

四,在顶级域内以 var 声明的变量,会添加到全局对象上,作为全局对象的一个属性。

var a = 1
window.a // 1