作用域

2018-05-21  本文已影响0人  zhangjingbibibi
//没块作用域
  if(true) {
    var c = 3
  }
  console.log(c)
//输出 3

  var a = 10,
    b = 20
  function fn(x) {
    var a = 100,
      c = 300;
    console.log('fn()', a, b, c, x)
    function bar(x) {
      var a = 1000,
        d = 400
      console.log('bar()', a, b, c, d, x)
    }

    bar(100)
    bar(200)
  }
  fn(10);
  //输出
  // fn() 100 20 300 10
  //bar() 1000 20 300 400 100
  //bar() 1000 20 300 400 200

作用域与执行上下文

  var a = 10,
    b = 20
  function fn(x) {
    var a = 100,
      c = 300;
    console.log('fn()', a, b, c, x)
    function bar(x) {
      var a = 1000,
        d = 400
      console.log('bar()', a, b, c, d, x)
    }

    bar(100)
    bar(200)
  }
  fn(10);
  //3个作用域,4个上下文环境

作用域链

  var a = 1
  function fn1() {
    var b = 2
    function fn2() {
      var c = 3
      console.log(c)
      console.log(b)
      console.log(a)
      console.log(d)
    }
    fn2()
  }
  fn1();
  //输出 3 2 1 ERROR:Uncaught ReferenceError: d is not defined

作用域面试题

  var x = 10;
  function fn() {
    console.log(x);
  }
  function show(f) {
    var x = 20;
    f();
  }
  show(fn);
//输出10


  var fn = function () {
    console.log(fn)
  }
  fn()
//输出  function(){console.log(fn)}
  var obj = {
    fn2: function () {
//      console.log(this===obj);     //true
//   console.log(fn2)           //fn2 is not defined
//     console.log(this.fn2)   //function(){console.log(this.fn2)}
            console.log(obj.fn2);           //function(){console.log(this.fn2)}
    }
  }
  obj.fn2()
  //输出  见上面
上一篇 下一篇

猜你喜欢

热点阅读