在vue3中setInterval 和 setTimeout 的区别

setInterval 和 setTimeout 主要有以下区别:

  1. 执行方式:

    • setInterval 会按照指定的时间间隔重复执行指定的函数或代码段
    • setTimeout 只会在指定的延迟时间后执行一次指定的函数或代码段
  2. 连续执行:

    • setInterval 会不断地按照固定间隔重复触发执行,除非被手动清除。
    • setTimeout 每次执行完后不会自动再次执行,除非在回调函数内部再次调用 setTimeout 来实现类似的重复效果。
  3. 清除方式:

    • 对于 setInterval,使用 clearInterval 方法并传入 setInterval 返回的标识符来停止定时任务。
    • 对于 setTimeout,使用 clearTimeout 方法并传入 setTimeout 返回的标识符来取消定时任务。
  4. 应用场景:

    • setInterval 适用于需要周期性执行的任务,比如定时更新数据或动画效果。
    • setTimeout 适用于在延迟一段时间后执行一次性的任务,比如延迟加载、延迟显示提示信息等。

总的来说,setInterval 用于重复执行,setTimeout 用于延迟执行一次。

虽然 DOM 型 XSS 攻击不经过服务器直接在客户端执行,但攻击者仍然可以通过以下方式窃取受害者的信息:

1. 使用 JavaScript 操作浏览器的 Cookie:通过 JavaScript 可以读取浏览器中与当前页面同源的 Cookie 信息。攻击者可以将获取到的 Cookie 发送到自己控制的服务器上。

2. 劫持表单提交:攻击者可以修改表单的提交行为,将表单数据发送到攻击者控制的服务器,而不是原本预期的合法服务器。

3. 利用浏览器的历史记录和缓存:获取浏览器的历史记录或读取本地缓存中的敏感信息。

4. 劫持浏览器的通信:例如,通过 JavaScript 拦截 XMLHttpRequest 或 Fetch API 的请求和响应,获取其中的敏感数据。

5. 诱导用户操作:通过弹出对话框等方式诱导用户进行某些操作,例如输入密码或其他敏感信息,然后获取这些输入。

总之,尽管攻击发生在客户端,但利用以下是一个使用 Vue 3 和 TypeScript 来演示 `setInterval` 和 `setTimeout` 的示例代码:

<template>
  <div>
    <p>{{ counter }}</p>
    <button @click="startInterval">启动间隔定时器</button>
    <button @click="startTimeout">启动延迟定时器</button>
    <button @click="stopInterval">停止间隔定时器</button>
    <button @click="stopTimeout">停止延迟定时器</button>
  </div>
</template>

<script setup lang="ts">
import { ref, onUnmounted } from 'vue';

let counter = ref(0);
let intervalId: number | null = null;
let timeoutId: number | null = null;

const startInterval = () => {
  intervalId = setInterval(() => {
    counter.value++;
  }, 1000);
};

const startTimeout = () => {
  timeoutId = setTimeout(() => {
    counter.value = 10;
  }, 5000);
};

const stopInterval = () => {
  if (intervalId) {
    clearInterval(intervalId);
    intervalId = null;
  }
};

const stopTimeout = () => {
  if (timeoutId) {
    clearTimeout(timeoutId);
    timeoutId = null;
  }
};

onUnmounted(() => {
  stopInterval();
  stopTimeout();
});
</script>

在上述代码中:

- `startInterval` 函数启动一个每秒递增 `counter` 值的 `setInterval` 定时器,并将其 ID 存储在 `intervalId` 中。
- `startTimeout` 函数在 5 秒后将 `counter` 值设置为 10,使用 `setTimeout` 并将其 ID 存储在 `timeoutId` 中。
- `stopInterval` 和 `stopTimeout` 函数分别用于停止对应的定时器。
- `onUnmounted` 钩子在组件卸载时自动调用停止定时器的函数,以避免潜在的内存泄漏。 JavaScript 的功能和浏览器的特性,攻击者仍然有多种手段来获取受害者的信息。

以下是对这段 Vue 3 代码的逐部分解析:

**模板部分(`<template>`)**:

<template>
  <div>
    <p>{{ counter }}</p>
    <button @click="startInterval">启动间隔定时器</button>
    <button @click="startTimeout">启动延迟定时器</button>
    <button @click="stopInterval">停止间隔定时器</button>
    <button @click="stopTimeout">停止延迟定时器</button>
  </div>
</template>

- 展示了一个段落 `<p>` 用于显示 `counter` 的值。
- 提供了四个按钮,分别用于触发 `startInterval`、`startTimeout`、`stopInterval` 和 `stopTimeout` 这四个方法。

**脚本部分(`<script setup>`)**:

import { ref, onUnmounted } from 'vue';

`- 从 `vue` 库导入了 `ref` 用于创建响应式数据,`onUnmounted` 用于组件卸载时执行一些清理操作

let counter = ref(0);
let intervalId: number | null = null;
let timeoutId: number | null = null;

- `counter` 是一个使用 `ref` 创建的响应式数据,初始值为 0 ,用于记录计数。
- `intervalId` 和 `timeoutId` 用于存储 `setInterval` 和 `setTimeout` 返回的定时器 ID ,初始值为 `null` 。

const startInterval = () => {
  intervalId = setInterval(() => {
    counter.value++;
  }, 1000);
};

- `startInterval` 方法用于启动一个间隔为 1 秒(1000 毫秒)的定时器,每次定时触发时,`counter` 的值增加 1 ,并将定时器 ID 存储在 `intervalId` 中。

const startTimeout = () => {
  timeoutId = setTimeout(() => {
    counter.value = 10;
  }, 5000);
};

- `startTimeout` 方法用于启动一个延迟 5 秒(5000 毫秒)的定时器,定时结束时将 `counter` 的值设置为 10 ,并将定时器 ID 存储在 `timeoutId` 中。

const stopInterval = () => {
  if (intervalId) {
    clearInterval(intervalId);
    intervalId = null;
  }
};

- `stopInterval` 方法用于停止通过 `startInterval` 启动的定时器,如果 `intervalId` 存在(表示有正在运行的间隔定时器),则使用 `clearInterval` 清除,并将 `intervalId` 重置为 `null` 。

const stopTimeout = () => {
  if (timeoutId) {
    clearTimeout(timeoutId);
    timeoutId = null;
  }
};

- `stopTimeout` 方法用于停止通过 `startTimeout` 启动的定时器,逻辑与 `stopInterval` 类似。

onUnmounted(() => {
  stopInterval();
  stopTimeout();
});


- 使用 `onUnmounted` 钩子,在组件卸载时自动调用 `stopInterval` 和 `stopTimeout` 方法,以清除可能仍在运行的定时器,防止内存泄漏。

Vue.js,你可以使用`setInterval`和`setTimeout`函数来执行定时任务。这两个函数允许你在指定的时间间隔或延迟后执行特定的代码。 1. `setInterval`函数用于创建一个定时重复执行的任务。它接受两个参数:要执行的函数和时间间隔(以毫秒为单位)。 ```javascript // 示例:每隔1秒输出一次日志 let intervalId = setInterval(() => { console.log("定时任务执行"); }, 1000); ``` 在Vue.js,通常将`setInterval`函数与生命周期钩子函数一起使用,以便在组件挂载后开始定时任务,并在组件销毁前清除定时器。 ```javascript export default { data() { return { intervalId: null }; }, mounted() { this.intervalId = setInterval(() => { console.log("定时任务执行"); }, 1000); }, beforeDestroy() { clearInterval(this.intervalId); } }; ``` 2. `setTimeout`函数用于创建一个只执行一次的延迟任务。它接受两个参数:要执行的函数和延迟时间(以毫秒为单位)。 ```javascript // 示例:延迟2秒后输出一次日志 setTimeout(() => { console.log("延迟任务执行"); }, 2000); ``` 同样,在Vue.js,可以将`setTimeout`函数与生命周期钩子函数一起使用,以在组件挂载后执行一次延迟任务。 ```javascript export default { mounted() { setTimeout(() => { console.log("延迟任务执行"); }, 2000); } }; ``` 请注意,在使用`setInterval`和`setTimeout`时,确保在适当的时候清除定时器,以避免内存泄漏和不必要的性能开销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值