作用域与变量提升

作用域:对某个范围产生作用,外部不能访问内部变量,但内部可以访问外部变量

var i = 0
function outer() {
  console.log(i)//0  
}

  

function outer() {
  var i = 0
  console.log(i)//0  
}
console.log(i)//报错,外部不可访问内部

  

变量提升:变量的声明被自动移动到了函数或全局代码的最顶上。函数声明可以写在任何地方,但是不能不写,不写报错

function outer() {
  console.log(i)//报错,未被声明,
}

function outer() {
  console.log(i)//undefined变量提升是把声明提至最前面,即var i但是赋值=0还在原来位置
  var i = 0
}

function outer() {
  var i = 0
  console.log(i)//0
}

  注意:var、function、function *和let、const、class的的提升却并不相同

//声明的函数名和变量一致的情况下,分为两种
//一:函数申明。function foo(){}这种形式,函数优先
console.log(foo)//function foo(){}
var foo = 'aa'
function foo(){}

//二:函数表达式。var foo=function(){}这种形式
console.log(foo)//undefined
var foo = 'aa'
var foo = function(){}

  

原文地址:https://www.cnblogs.com/xiaobai1/p/10525785.html