在IT界,需要大量的javascript开发者。如果这个角色能够最佳地展现你的能力,那么你有许多机会换家公司,以及提高薪水。但是在你被公司录取之前,你需要展现你的技术,以便通过面试环节。在这篇文章中,我会展示你五个典型的问题。
问题1: 范围(Scope)
思考以下代码:
(function() { var a = b = 5; })(); console.log(b);
控制台(console)会打印出什么?
答案
上述代码会打印出 5 。
这个问题的陷阱就是,在立即执行函数表达式(IIFE)中,有两个命名,但是其中变量是通过关键词 var 来声明的。这就意味着 a 是这个函数的本地变量。与此相反, b 是属于这个函数的全局变量的。
这个问题另一个陷阱就是,在函数中他没有使用 "严格模式" ( 'use strict'; )。如果 严格模式 开启,那么代码就会报出未捕获引用错误(Uncaught ReferenceError):b没有定义。记住严格模式要求,如果这个是预期的行为,你需要明确地引用全局变量,。因此,你需要像下面这么写:
(function() { 'use strict'; var a = window.b = 5; })(); console.log(b);
问题2: 创建 “原生(native)” 方法
在 String 对象上定义一个 repeatify 函数。这个函数接受一个整数参数,来明确字符串需要重复几次。这个函数要求字符串重复指定的次数。举个例子:
`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 。
这个结果的原因是,变量和函数都被提升了( hoisted )。因此,那个时候 a 被打印了,它存在函数之中(也就是声明了),但是依然是 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 。原因是在javascript中,一个函数的语境,也就是 this 这个关键词引用的,依赖于函数是如何调用的,不是如何定义的。
在第一个 console.log() 调用中, getFullname() 是作为 obj.prop 的函数被调用的。因此,这里的语境指向后者并且函数返回对象的 fullname 属性。相反,当 getFullname() 被指定为 test 的变量,那个语境指向全局对象( window )。因为 test 相当于设置为全局对象的属性。因为这个原因,函数返回 window 的一个 fullname 属性,这在这个案例中是在代码片段中第一行设置的。
问题5: call() 和 apply()
修复上一个问题,让最后一个 console.log() 打印出 Aurelio De Rosa 。
答案
这个问题可以通过函数 call() 或者 apply() 强制函数语境。如果你不知道 call() 和 apply() 之间的区别,我推荐阅读文章 function.call和function.apply之间有和区别? 。在以下代码中,我会用 call() ,但是在这个案例中, apply() 也可以获得相同的结果:
`console.log(test.call(obj.prop));``
结论
在这篇文章中,我们讨论了,在面试中为了测试javascript开发者,而会问到的五种典型的问题。来自面试的真实问题可能会有所不同,但是涵盖的概念和主题通常都是十分相似的。我希望你愉悦地测试你的能力。万一你不知道所有的答案,不要担心:没有学习和经验不能解决的问题。
如果你在面试中被问到了其他有趣的问题,不要犹豫马上来和我们分享吧。这会帮助到很多的开发者。
以上是五道典型的javascript面试题的详细内容。更多信息请关注PHP中文网其他相关文章!

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Dreamweaver CS6
视觉化网页开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。