看看上面的代码将打印什么?

var b = 10;(function b(){    b = 20;    console.log(b); // function b})();
  • 函数申明优于变量申明
  • 在非匿名自执行的函数中,函数变量为只读状态

革新上面的代码,打印10 20

var b = 10;(function b(){    b = 20;    console.log(b); })();
  1. 函数外部增加申明, 浏览器环境
var b = 10;(function b(){    var b = 20;    // console.log(window.b)    console.log(this.b)     console.log(b); })();
  1. 传值
var b = 10;(function b(i){    var b = 20;    console.log(i);     console.log(b); })(b);

看看上面的代码将打印什么?

var a = 10;(function () {    console.log(a)    a = 5    console.log(window.a)    var a = 20;    console.log(a)})()
  • 因为变量申明晋升 所以函数外部,第一个a 第五行打印undefined
  • 第六行 给外部变量a赋值和window无关,所以 第七行打印10
  • 第八行函数外部变量赋值20 ,第九行打印20