建站须知
企业网站建设的流程主要有哪些

UI设计、域名服务器、写代码、后台开发

js中window方法相关面试题及答案

时间:2025-04-15   查看:99次

对话框方法:

1. 列举 Window 对象提供的三种对话框方法,并说明它们各自的用途和区别。

alert():显示警告消息,只有确定按钮

confirm():显示确认对话框,有确定和取消按钮,返回布尔值

prompt():显示输入对话框,可获取用户输入内容


2. 为什么在现代前端开发中不推荐使用这些对话框方法?

会阻塞JavaScript执行和页面渲染

外观无法自定义,与网站风格不协调

用户体验差,现代UI倾向于使用自定义模态框

某些浏览器在非用户触发时可能阻止显示


定时器方法:

1. 请解释 setTimeout 和 setInterval 的区别,并写出清除它们的对应方法。

setTimeout:在指定的延迟时间后执行一次函数

const timerId = setTimeout(() => console.log('执行一次'), 1000);

clearTimeout(timerId); // 清除

setInterval:每隔指定的时间间隔重复执行函数

const intervalId = setInterval(() => console.log('重复执行'), 1000);

clearInterval(intervalId); // 清除


2. 什么是"零延时 setTimeout"(setTimeout(fn, 0))?它有什么实际应用场景?

“零延时”并不是立即执行,而是将回调放入事件队列,等待当前执行栈清空后立即执行。

应用场景:

将耗时操作拆分为多个任务,避免阻塞UI渲染

在DOM更新后执行某些操作

处理事件冒泡时的执行顺序问题


窗口控制:

1. 如何使用 Window 方法打开一个新窗口?如何确保它在大多数浏览器中不会被弹出拦截器阻止?

打开新窗口

const newWindow = window.open('https://www.html20.com', '_blank', 'width=500,height=500');

避免被拦截的方法:

必须在用户点击事件处理程序中直接调用

不要异步调用(如setTimeout内)

不要在一个事件处理程序中打开多个窗口


2. window.open() 方法的返回值是什么?如何通过这个返回值控制新打开的窗口?

返回新窗口的引用"newWindow",可通过它控制新窗口:

if(newWindow) {

  newWindow.close(); // 关闭窗口

  newWindow.moveTo(100, 100); // 移动窗口

}


滚动控制:

1. 列举三种控制窗口滚动行为的 Window 方法,并简要说明它们的作用。

scrollTo(x, y):滚动到指定坐标

scrollBy(x, y):相对当前位置滚动

scroll(options):支持平滑滚动的现代方法


2. 如何实现平滑滚动到页面顶部的功能?请写出代码示例。

window.scrollTo({

  top: 0,

  behavior: 'smooth'

});


请求动画帧:

1. requestAnimationFrame 相比 setTimeout 或 setInterval 实现动画有什么优势?

与浏览器刷新率同步(通常60fps),动画更流畅

当页面不可见时会自动暂停,节省资源

浏览器会优化执行,性能更好


2. 请写出使用 requestAnimationFrame 实现一个简单动画的代码框架。

function animate() {

  // 更新动画状态

  element.style.left = `${position}px`;

  position += 1;

  if(position < 100) {

    requestAnimationFrame(animate);

  }

}

requestAnimationFrame(animate); 


事件监听:

1. window.addEventListener 和直接给 window.onEvent 赋值有什么区别?

addEventListener 可以添加多个监听器,onEvent 会覆盖

addEventListener 可以控制捕获/冒泡阶段

addEventListener 更易于移除特定监听器


2. 如何监听浏览器窗口大小变化事件?请写出代码示例。

window.addEventListener('resize', () => {

  console.log(`窗口大小: ${window.innerWidth}x${window.innerHeight}`);

});


存储相关:

1. window.localStorage 和 window.sessionStorage 有什么区别?

localStorage:持久存储,关闭浏览器后仍存在

sessionStorage:会话级存储,关闭标签页后清除

两者都有相同的API(setItem/getItem/removeItem)


2. 如何监听其他标签页对 localStorage 的修改?

window.addEventListener('storage', (event) => {

  console.log('存储变化:', event.key, event.newValue);

});


跨窗口通信:

1. 如何实现同源策略下不同窗口/标签页之间的通信?

使用postMessage方法:

// 发送消息

otherWindow.postMessage('消息内容', 'https://example.com');

// 接收消息

window.addEventListener('message', (event) => {

  if(event.origin !== 'https://www.html20.com') return;

  console.log('收到消息:', event.data);

});


2. window.postMessage 方法的安全注意事项有哪些?

始终验证event.origin,防止恶意网站发送消息

指定精确的目标origin,不要使用*(除非必要)

对接收的数据进行验证和清理


性能相关:

1. window.performance 对象提供了哪些有用的前端性能测量方法?

performance.now():高精度时间戳

performance.mark():创建性能标记

performance.measure():测量两个标记间的时间

performance.getEntries():获取资源加载性能数据


2. 如何使用这些方法来测量页面加载时间?

window.addEventListener('load', () => {

  const timing = performance.timing;

  const loadTime = timing.loadEventEnd - timing.navigationStart;

  console.log(`页面加载时间: ${loadTime}ms`);

});


综合应用:

设计一个功能:当用户离开当前页面时(包括关闭标签页、刷新页面或导航到其他页面),弹出一个确认对话框提示用户"您确定要离开吗?"。请写出实现代码并说明可能的问题和限制。

window.addEventListener('beforeunload', (event) => {

  event.preventDefault();

  event.returnValue = '您确定要离开吗?';

  return '您确定要离开吗?';

});

问题和限制:

现代浏览器会忽略自定义消息,显示统一提示

不能完全阻止用户离开,只是提示

某些浏览器可能限制非用户交互触发的提示

可能干扰用户体验,应谨慎使用

上一篇:前端学习笔记

下一篇:没有了!