变量提升问题

41 阅读1分钟
console.log(a); // 输出什么? //报错
{
  let a = 1;
}

console.log(a); // 输出什么? //undefined
{
  var a = 1;
}
console.log(a); // 输出什么? //报错 立即执行函数--闭包
(function() { var a = 1; })();

4.只有函数时声明,函数提升到最顶部,函数字面量式声明不会,只会提升对应的字段名-undefined。如果是let定义则不会提升

1. 
var a = 1; 
function foo() { 
console.log(a);
var a = function() {} 
} 
foo(); // 输出什么? undefined

2. 
var a = 1;
function foo() {
  console.log(a); 
  let a = function() {}
}
foo(); // 输出什么? 报错

3. 
var a = 1;
function foo() {
  console.log(a); 
   function a() {}
}
foo(); // 输出什么? function a