基础面试题

  • 这道题的经典之处在于它综合考察了面试者的JavaScript的综合能力
  • 包含了变量定义提升
  • this指针指向、
  • 运算符优先级、
  • 原型、
  • 继承、
  • 全局变量污染、
  • 对象属性及原型属性优先级等知识
//  创建了Foo函数
function Foo () {
    // 为Foo函数创建了getName的静态属性存储了一个匿名函数
    getName = function () {
        console.log(1)
    }
    return this
}

// 为Foo的原型对象创建了一个叫getName的匿名函数
Foo.getName = function () {
    console.log(2)
}

Foo.prototype.getName = function () {
    console.log(3)
}

// 通过函数变量表达式创建了一个getName函数
var getName = function () {
    console.log(4)
}

function getName () {
    console.log(5)
}

// Foo.getName自然是访问Foo函数上存储的静态属性
Foo.getName()            //2

getName()                //4

Foo().getName()          //1

getName()                //1

new Foo.getName()        //2

new new Foo().getName()  //3

第一问Foo.getName()

function User (name) {
    var name = name   //私有属性
    this.name = name  //公有属性
    function getName ()  {  //私有方法
        return name
    }
}

User.prototype.getName = function () {//公有方法
    return this.name
}

User.name = 'zwz' //静态属性
User.getName = function () { //静态方法
    return this.name
}

var zz = new User('zwz')  //实例化
  • 调用公有属性,公有方法,我们必须先实例化对象,也据说new操作符实例化对象,就可构造实例化对象的方法和属性,并且公有方法是不能调用私有方法和静态方法的

  • 静态方法和静态属性就是我们无需实例化就可以调用的
    而对象的私有方法和属性,外部是不可以访问的

第二问getName()

直接调用getName(),既然是直接调用那么就是访问当前上下文作用域内的叫getName() 的函数,和123没用关系

// 函数声明
function zwz (type) {
    return type === 'zwz'
}

// 函数表达式
var zwz = function (type) {
    return type === 'zwz'
}

var getName  //undefined
getName()    //TypeError:getName is not a function
var getName = function () {
    console.log(zwz)
}

var getName  //undefined
getName()
function getName() {
    console.log(zwz)
}

函数声明和函数表达式是存在区别的,函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明定义在哪里,该函数都可以调用而函数表达式的值是在JS运行时确定的,并且在表达式完成赋值后,该函数才能调用。所所以4覆盖了5


  Reprint please specify: 云深不知处 基础面试题

 Previous
JSON JSON
JSON(JavaScript对象字面量表示法)JSON 是一种数据交互格式 JSON 独立于编程语言 JSON基于JavaScript对象字面量表示法 JSON表达数据的方式对通用的编程很友好 正确的JSON语法名称 - 值对 名称总是要
2019-04-13
Next 
高新兴科技面试 高新兴科技面试
web前端实习生(2020届毕业生) 1、掌握HTML、Javascript、CSS、ajax等前端开发技术,熟悉jQuery/vue等主流前端开发框架,熟悉css2/css3,掌握各种布局原理,能灵活应用 2、了解设计模式,掌握MVC等设
2019-04-09
  TOC