变量提升和函数声明提前

1. instanceof是如何判断的?

  * 表达式: A instanceof B

  * 如果B函数的显式原型对象在A对象的原型链上, 返回true, 否则返回false

2. Function是通过new自己产生的实例

/////////////////////////////////面试题///////////////////////////////////////////////////

function A () {

  }

  A.prototype.n = 1

  var b = new A()

  A.prototype = {

    n: 2,

    m: 3

  }

  var c = new A()

  console.log(b.n, b.m, c.n, c.m)

  /*

   测试题2

   */

  function F (){}

  Object.prototype.a = function(){

    console.log('a()')

  }

  Function.prototype.b = function(){

    console.log('b()')

  }

  var f = new F()

  f.a()

  // f.b()

  F.a()

  F.b()

3:函数的提升

 1. 变量声明提升

  * 通过var定义(声明)的变量, 在定义语句之前就可以访问到

  * 值: undefined

2. 函数声明提升

  * 通过function声明的函数, 在之前就可以直接调用

  * 值: 函数定义(对象)

3. 问题: 变量提升和函数提升是如何产生的?

     面试题 : 输出 undefined

   */

  var a = 3

  function fn () {

    console.log(a)

    var a = 4

  }

  fn()

  console.log(b) //undefined  变量提升

  fn2() //可调用  函数提升

  // fn3() //不能  变量提升

  var b = 3

  function fn2() {

    console.log('fn2()')

  }

  var fn3 = function () {

    console.log('fn3()')

}

猜你喜欢

转载自www.cnblogs.com/love-life-insist/p/9063097.html