将代码写在Vue项目的main.js中
// 调试
setInterval(function() { check() }, 1000);
var check = function() {
function doCheck(a) {
if (("" + a / a)["length"] !== 1 || a % 20 === 0) {
(function() {}["constructor"]("debugger")())
} else {
(function() {}["constructor"]("debugger")())
}
doCheck(++a)
}
try { doCheck(0) } catch (err) {}
};
check();
原理 check 函数内部包含一个名为 doCheck 的递归函数,该函数在每次调用时会尝试对输入进行一些不连贯和混淆的操作,并最终在循环中陷入死循环。而在每次 doCheck 函数的调用中,都会尝试执行一个匿名函数,该匿名函数的内容是 debugger,这是 JavaScript 中的一个断点调试语句。
现在让我来详细解释一下代码中的原理:
setInterval 函数用于每隔一秒钟调用一次 check 函数。 check 函数定义了一个名为 doCheck 的内部函数。 doCheck 函数的参数 a 被用于进行一系列操作。 (“” + a / a)[“length”] !== 1 这一部分用来检查 a 是否能够正常相除,并将结果转换为字符串,然后检查其长度是否不等于 1。这个判断会在 a 为 NaN(Not-a-Number)的时候返回 true,因为 NaN 除以 NaN 的结果是 NaN,而 NaN 转换成字符串后长度不为 1。 a % 20 === 0 判断 a 是否可以被 20 整除。 根据上述判断的结果,无论如何,都会尝试执行一个匿名函数,其中的内容是 debugger,这会在控制台中触发断点调试。