前端面试题(记错)

158 阅读1分钟
    function bar() {
      return foo;
      foo = 10;

      function foo() {var a = 1}
      var foo = function () {var a = 2}
      var foo = 11;
    }
    console.log(bar());//ƒ foo() {var a = 1}
    function bar() {
      function foo() {var a = 1}
      var foo = function () {var a = 2}
      var foo = 11;

      return foo;
      foo = 10;
    }
    console.log(bar());//11
    function bar() {
      function foo() {var a = 1}
      var foo = 11;
      var foo = function () {var a = 2}

      return foo;
      foo = 10;
    }
    console.log(bar());//ƒ foo() {var a = 2}
  • 变量提升与函数提升
    • 变量提升: 在变量定义语句之前, 就可以访问到这个变量(undefined)
    • 函数提升: 在函数定义语句之前, 就执行该函数
    • 先有函数提升, 再有变量提升

    var foo = 1
    function bar() {
      foo = 10
      return;
      function foo() {}
    }
    bar()
    console.log(foo);//1
    var foo = 1
    function bar() {
      foo = 10
      return;
      //function foo() {}
    }
    bar()
    console.log(foo);//10

当在某个环境中为了读取或写入而引用一个标识符时,必须通过搜索来确定该标识符实际代表什么。
查找变量是沿着作用域链查找,查找属性是沿着原型链查找。