首页 > 语言 > JavaScript > 正文

8个有意思的JavaScript面试题

2024-05-06 15:36:23
字体:
来源:转载
供稿:网友

JavaScript 是一种有趣的语言,我们都喜欢它,因为它的性质。浏览器是JavaScript的主要运行的地方,两者在我们的服务中协同工作。JS有一些概念,人们往往会对它掉以轻心,有时可能会忽略不计。原型、闭包和事件循环等概念仍然是大多数JS开发人员绕道而行的晦涩领域之一。正如我们所知,无知是一件危险的事情,它可能会导致错误。

接下来,来看看几个问题,你也可以试试想想,然后作答。

问题1:浏览器控制台上会打印什么?

var a = 10;function foo() { console.log(a); // ?? var a = 20;}foo();

问题2:如果我们使用 let 或 const 代替 var,输出是否相同?

var a = 10;function foo() { console.log(a); // ?? let a = 20;}foo(); 

问题3:“newArray”中有哪些元素?

var array = [];for (var i = 0; i < 3; i++) { array.push(() => i);}var newArray = array.map(el => el());console.log(newArray); // ?? 

问题4:如果我们在浏览器控制台中运行'foo'函数,是否会导致堆栈溢出错误?

function foo() { setTimeout(foo, 0); // 是否存在堆栈溢出错误?}

问题5: 如果在控制台中运行以下函数,页面(选项卡)的 UI 是否仍然响应

function foo() { return Promise.resolve().then(foo);} 

问题6: 我们能否以某种方式为下面的语句使用展开运算而不导致类型错误

var obj = { x: 1, y: 2, z: 3 };[...obj]; // TypeError

问题7:运行以下代码片段时,控制台上会打印什么?

var obj = { a: 1, b: 2 };Object.setPrototypeOf(obj, { c: 3 });Object.defineProperty(obj, "d", { value: 4, enumerable: false });// what properties will be printed when we run the for-in loop?for (let prop in obj) { console.log(prop);}

问题8:xGetter() 会打印什么值?

var x = 10;var foo = { x: 90, getX: function() { return this.x; }};foo.getX(); // prints 90var xGetter = foo.getX;xGetter(); // prints ??

答案

现在,让我们从头到尾回答每个问题。我将给您一个简短的解释,同时试图揭开这些行为的神秘面纱,并提供一些参考资料。

问题1: undefined

使用var关键字声明的变量在JavaScript中会被提升,并在内存中分配值undefined。 但初始化恰发生在你给变量赋值的地方。 另外,var声明的变量是函数作用域的,而letconst是块作用域的。 所以,这就是这个过程的样子:

var a = 10; // 全局使用域function foo() { // var a 的声明将被提升到到函数的顶部。 // 比如:var a console.log(a); // 打印 undefined // 实际初始化值20只发生在这里 var a = 20; // local scope}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选