美文网首页
js综合面试题

js综合面试题

作者: 9月的甜橙子 | 来源:发表于2021-10-08 11:02 被阅读0次

题目

// 已知
function Foo() {
  getName = function() { alert (1) };
  return this;
}
Foo.getName = function () { alert (2) };
Foo.prototype.getName = function ()  { alert (3) };
var getName = function ()  { alert (4) };
function getName()  { alert (5) };
// 请写出下列输出结果
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo.getName();
  1. 考虑到变量提升和函数提升
function Foo() {
  getName = function() { alert (1) };
  return this;
}
var getName;
function getName()  { alert (5) };
// -----变量提升只提升声明变量部分,而函数提升全部
Foo.getName = function () { alert (2) };
Foo.prototype.getName = function ()  { alert (3) };
getName = function ()  { alert (4) };
  1. 由于var getName和function getName()命名冲突,var getName会被忽略
function Foo() {
  getName = function() { alert (1) };
  return this;
}
// var getName;
function getName()  { alert (5) };
// -----变量提升只提升声明变量部分,而函数提升全部
Foo.getName = function () { alert (2) };
Foo.prototype.getName = function ()  { alert (3) };
getName = function ()  { alert (4) };

3.由于最后一行对getName进行赋值,所以function getName() { alert (5) };变了

function Foo() {
  getName = function() { alert (1) };
  return this;
}
// var getName;
// function getName()  { alert (5) };
// -----变量提升只提升声明变量部分,而函数提升全部
Foo.getName = function () { alert (2) };
Foo.prototype.getName = function ()  { alert (3) };
getName = function ()  { alert (4) };

4.接下来看输出结果

Foo.getName(); // 2
getName(); // 4
Foo().getName(); // (Foo()).getName() ---> 执行Foo()函数然后寻找getName变量,沿着作用域链找--->找到最后一行的alert(4),重新赋值为alert(1)

5.由于执行了Foo().getName()

function Foo() {
  getName = function() { alert (1) };
  return this;
}
// var getName;
// function getName()  { alert (5) };
// -----变量提升只提升声明变量部分,而函数提升全部
Foo.getName = function () { alert (2) };
Foo.prototype.getName = function ()  { alert (3) };
// getName = function ()  { alert (4) };
getName = function ()  { alert (1) };

5.接下来继续看输出结果

Foo.getName(); // 2
getName(); // 4
Foo().getName(); // (Foo()).getName() ---> window.getName()----> 1
getName(); // 1

6.接下来继续看输出结果,主要考察点运算符的顺序

new Foo.getName(); 
// new (Foo.getName()) ---> new一个函数则会执行一个函数并返回一个实例对象 ---> 2
new Foo().getName(); 
// 点运算符见到()不能进行点调用 ---> (new Foo()).getName()  ---> foo.getName() ---> 实例对象找属性沿着原型链找(自身,prototype, __prototype__, Object)--->  3
new new Foo().getName(); 
// new (new Foo()).getName)() ---> new (foo.getName)() ---> 3

refer to https://www.bilibili.com/video/BV1nb411P7tQ?p=12&spm_id_from=pageDriver

相关文章

  • js综合面试题

    题目 考虑到变量提升和函数提升 由于var getName和function getName()命名冲突,var ...

  • js基础面试题

    面试题:延迟加载JS有哪些方式? 面试题:JS数据类型有哪些? 面试题:JS数据类型考题 考题一: 考题二: 面试...

  • 前端相关大杂烩

    前端基础面试题(JS部分) 前端基础面试题(JS部分)学习 React.js 比你想象的要简单 原文地址:Lear...

  • js综合基础面试题整理

    实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Obje...

  • 前端JavaScript面试技巧

    1-1 课程概述 要做什么?——讲解前端 JS 基础面试题 哪些部分?——JS 基础,JS-WEB-API,JS ...

  • 2021 web高频面试题新人可看

    当日目标 1 常见面试题分布情况? 2 高频面试题 1 常见面试题分布情况 公司面试题一般分为js,vue,小程序...

  • js 基础面试题

    js 基础面试题 1 js中使用typeof能得到哪些类型? undefined、string、number、bo...

  • 99%的人都会答错的js面试题(你会吗?)(转)

    99%的人都会答错的js面试题(你会吗?)

  • js数组题目

    js面试题 js数组 一、按要求分割数组 将"js,数组,分类"字符串数组以/分割 for循环累加 join()把...

  • 前端JavaScript面试技巧

    先看几道面试题: 1、JS中使用typeof能得到哪些类型。//JS变量类型2、何时使用“==”、“===”。//...

网友评论

      本文标题:js综合面试题

      本文链接:https://www.haomeiwen.com/subject/rqdgnltx.html