5个经典的javascript面试问题

问题1:Scope作用范围


考虑下面的代码:

(function() {
   var a = b = 5;
})();

console.log(b);


什么会被打印在控制台上?

回答

上面的代码会打印 5。

这个问题的诀窍是,这里有两个变量声明,但 a 使用关键字var声明的。代表它是一个函数的局部变量。与此相反,b 变成了全局变量。

这个问题的另一个诀窍是,它没有使用严格模式 ('use strict';) 。如果启用了严格模式,代码就会引发ReferenceError的错误:B没有定义(b is not defined)。请记住,严格模式,则需要明确指定,才能实现全局变量声明。比如,你应该写:

(function() {
   'use strict';
   var a = window.b = 5;
})();

console.log(b);



问题2:创建“原生”(native)方法


给字符串对象定义一个repeatify功能。当传入一个整数n时,它会返回重复n次字符串的结果。例如:

console.log('hello'.repeatify(3));


应打印 hellohellohello。


回答

一个可能的实现如下所示:

String.prototype.repeatify = String.prototype.repeatify || function(times) {
   var str = '';
   for (var i = 0; i < times; i++) {
      str += this;
   }
   return str;
};

现在的问题测试开发者有关JavaScript继承和prototype的知识点。这也验证了开发者是否知道该如何扩展内置对象(尽管这不应该做的)。

这里的另一个要点是,你要知道如何不覆盖可能已经定义的功能。通过测试一下该功能定义之前并不存在:

String.prototype.repeatify = String.prototype.repeatify || function(times) {/* code here */};

当你被要求做好JavaScript函数兼容时这种技术特别有用。

问题3:声明提升(Hoisting)


执行这段代码,输出什么结果。

function test() {
   console.log(a);
   console.log(foo());
   var a = 1;
   function foo() {
      return 2;
   }
}

test();

回答

这段代码的结果是 undefined 和 2。

原因是,变量和函数的声明都被提前了(移到了函数的顶部),但变量不分配任何值。因此,在打印变量的时候,它在函数中存在(它被声明了),但它仍然是 undefined 。表示换句话说,上面的代码等同于以下内容:

function test() {
var a;
function foo() {
return 2;
}

console.log(a);
console.log(foo());

a = 1;
}

test();

问题4:this在JavaScript中如何工作的


下面的代码会输出什么结果?给出你的答案。

var fullname = 'John Doe';
var obj = {
fullname: 'Colin Ihrig',
prop: {
fullname: 'Aurelio De Rosa',
getFullname: function() {
return this.fullname;
}
}
};

console.log(obj.prop.getFullname());

var test = obj.prop.getFullname;

console.log(test());

回答

答案是Aurelio De Rosa和John Doe。原因是,在一个函数中,this的行为,取决于JavaScript函数的调用方式和定义方式,而不仅仅是看它如何被定义的。

在第一个 console.log()调用中,getFullname() 被调用作为obj.prop对象的函数。所以,上下文指的是后者,函数返回该对象的fullname。与此相反,当getFullname()被分配到test变量时,上下文指的是全局对象(window)。这是因为test是被隐式设置为全局对象的属性。出于这个原因,该函数返回window的fullname,即定义在第一行的那个值。

问题5:call() 和 apply()


现在让你解决前一个问题,使最后的console.log() 打印 Aurelio De Rosa。

回答

该问题可以通过强制使用 call() 或者 apply() 改变函数上下文。在下面我将使用call(),但在这种情况下,apply()会输出相同的结果:

console.log(test.call(obj.prop));


结论


 

转载于:https://www.cnblogs.com/LoveOrHate/p/4377622.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python查看字符编码_python如何查看字符集

python查看字符集的方法&#xff1a;可以利用第三方库chardet来进行判断。通过在命令行下执行【pip install chatdet】命令来安装chardet。使用方法如&#xff1a;【chardet.detect(bHello, world!)】。Python利用第三方库chardet判断字符集。如果安装了Anaconda&#xff0c;ch…

小程序多个echars_小程序界面与逻辑

主要内容数据绑定、渲染、界面层数据渲染和事件处理。一、数据绑定1.1 渲染层和逻辑层小程序宿主环境我们称微信客户端给小程序所提供的环境为宿主环境。小程序借助宿主环境提供的能力&#xff0c;可以完成许多普通网页无法完成的功能。小程序开发框架的目标是通过尽可能简单、…

Bootloader启动过程

1、作用 嵌入式系统的引导加载程序&#xff0c;系统上电后运行的第一段程序。在完成对系统的初始化任务后&#xff0c;它会将非易失性存储器&#xff08;通常是FLASH&#xff09;中的Linux内核拷贝到RAM中&#xff0c;然后跳转到内核的第一条指令处继续执行&#xff0c;从而启动…

LeetCode 1876. 长度为三且各字符不同的子字符串

文章目录1. 题目2. 解题1. 题目 如果一个字符串不含有任何重复字符&#xff0c;我们称这个字符串为 好 字符串。 给你一个字符串 s &#xff0c;请你返回 s 中长度为 3 的 好子字符串 的数量。 注意&#xff0c;如果相同的好子字符串出现多次&#xff0c;每一次都应该被记入…

python官方的扩展索引_Python列表操作与深浅拷贝(6)——列表索引、查询、修改、扩展...

列表list定义L1 []L2 [1,2,‘abc‘]L3list()L4 list(range(5))L5 [1,‘abc‘,True,None,[4,5,‘abc‘],str]isinstance(L5,list)True列表索引访问L6 list(range(5,10))L6[5, 6, 7, 8, 9]正索引&#xff1a;从下边界至上边界&#xff0c;从0开始&#xff0c;为列表中每一个元素…

numpy维度交换_数据分析-gt;基本操作numpy(1)

1.Numpy介绍与安装Numpy是什么&#xff1f;Numpy(Numerical Python)是目前Python数值计算中最为重要的基础包。大多数计算包都提供了基于Numpy的科学函数功能&#xff0c;将Numpy的数组对象作为数据交换的通用语。Numpy特点提供高效多维数组提供了基于数组的便捷算术操作以及广…

C#学习记录3上——类的封装,继承,多态

OOP面向对象的三大特点&#xff1a;封装&#xff08;encapsulation&#xff09;&#xff0c;继承&#xff08;inheritance&#xff09;&#xff0c;多态&#xff08;encapsulation&#xff09; 和JAVA与C一样&#xff0c;C#也是OOP语言。并且&#xff0c;C#对数据的封装要比C更…

LeetCode 1878. 矩阵中最大的三个菱形和(模拟)

文章目录1. 题目2. 解题1. 题目 给你一个 m x n 的整数矩阵 grid 。 菱形和 指的是 grid 中一个正菱形 边界 上的元素之和。 本题中的菱形必须为正方形旋转45度&#xff0c;且四个角都在一个格子当中。 下图是四个可行的菱形&#xff0c;每个菱形和应该包含的格子都用了相应颜…

计算尖峰电流的目的_入门必看!负荷计算的目的、方法以及原则详解

感谢关注【易筑电气】&#xff0c;我们会定期为您推送最新的电气资讯和各类实用干货&#xff0c;欢迎有料的电气设计师加入我们的QQ交流群&#xff1a;571819142。想了解我们的线上讲师招募计划&#xff1f;添加QQ&#xff1a;3335847624 开启新世界~负荷计算目的和意义低压供配…

python多线程实现方式_python中实现多线程有几种方式?

我们都知道&#xff0c;代码编程不是固定的东西&#xff0c;而是非常灵活的内容&#xff0c;根据不同的内容&#xff0c;我们可以拓展出很多条内容&#xff0c;最终目的还是为了可以实现结果&#xff0c;给大家举例说明其中一个最常用的多线程吧~以及实现的几种方式。1. 用函数…

linux查看磁盘占用

df -h比如是/data很满cd /datadu -sh *就可以看出哪个文件夹大&#xff0c;重复上面一步即可转载于:https://www.cnblogs.com/fenle/p/4381236.html

上下伸缩代码_CQRS之旅——旅程4(扩展和增强订单和注册限界上下文)

旅程4&#xff1a;扩展和增强订单和注册限界上下文进一步探索订单和注册的有界上下文。“我明白&#xff0c;如果一个人想看些新鲜的东西&#xff0c;旅行并不是没有意义的。”儒勒凡尔纳&#xff0c;环游世界80天对限界上下文的更改&#xff1a;前一章详细描述了订单和注册限界…

LeetCode 1879. 两个数组最小的异或值之和(状态压缩DP)

文章目录1. 题目2. 解题2.1 回溯2.2 状态压缩DP1. 题目 给你两个整数数组 nums1 和 nums2 &#xff0c;它们长度都为 n 。 两个数组的 异或值之和 为 (nums1[0] XOR nums2[0]) (nums1[1] XOR nums2[1]) ... (nums1[n - 1] XOR nums2[n - 1]) &#xff08;下标从 0 开始&am…

二叉排序树的后序遍历序列必然是递增的_剑指offer 33——二叉搜索树的后序遍历序列...

本题主要在于考察对二叉搜索树和后序遍历的理解。原题输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true&#xff0c;否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树&#xff1a;5 / 2 6…

LeetCode 1880. 检查某单词是否等于两单词之和

文章目录1. 题目2. 解题1. 题目 字母的 字母值 取决于字母在字母表中的位置&#xff0c;从 0 开始 计数。即&#xff0c;a -> 0、b -> 1、c -> 2&#xff0c;以此类推。 对某个由小写字母组成的字符串 s 而言&#xff0c;其 数值 就等于将 s 中每个字母的 字母值 按…

python求矩阵的秩_Python 实现线性代数计算器

计算逆序数&#xff0c;运用O(N^2)的算法计算# 逆序数计算def reversePairs(nums):"""计算数组的逆序数&#xff0c;输入数组&#xff0c;返回逆序数"""res, n 0, len(nums)for i in range(1,n):for j in range(0,i):if nums[j]>nums[i]:res …

查询去除空值_SQL数据处理(五):SQL多表查询

一. 表的加法加法(union)。合并两张数据表course和course1/去除重复行重合【select 课程号,课程名称 from course union select 课程号,课程名称 from course1;】 输出结果两个表合并的数据若要保留重复的行数据(union all)【select 课程号,课程名称 from course union all sel…

WPS Office文档未保存怎么恢复

有时候用WPS Office时&#xff0c;文档还没保存&#xff0c;因为电脑卡死或者关机&#xff0c;再次打开时编辑的内容都不见了&#xff0c;这个时候可以利用WPS自带的备份功能来恢复文档&#xff0c;表格、幻灯片、文档都是可以的。 首先单击WPS左上角的按钮&#xff0c;选择&qu…

LeetCode 664. 奇怪的打印机(区间DP)

文章目录1. 题目2. 解题1. 题目 有台奇怪的打印机有以下两个特殊要求&#xff1a; 打印机每次只能打印由 同一个字符 组成的序列。每次可以在任意起始和结束位置打印新字符&#xff0c;并且会覆盖掉原来已有的字符。 给你一个字符串 s &#xff0c;你的任务是计算这个打印机…

程序闪退怎么运行_苹果应用程序崩溃闪退怎么办?如何解决苹果设备的软故障?...

你们在使用苹果设备的时候是不是经常遇到程序卡死&#xff0c;或者苹果设备假死的情况&#xff1f;如果您遇到程序崩溃闪退或报错的时候&#xff0c;请不要慌张&#xff0c;按照以下方法解决问题。苹果设备它是应用程序问题还是设备故障&#xff1f;首先&#xff0c;您必须弄清…