将文件覆盖到本地的做法:
点击选择文件夹,创建一个空文件夹,点选启用本地替换。之后每次替换,都会把js文件保存在选定的文件夹中。
debugger 代码:
(function anonymous(
) {
debugger
})
(()=>{
function block() {
setInterval(()=>{
Function("debugger")()
}
, 50)
}
try {
block()
} catch (err) {}
}
)();
代码含义:
这段代码是一个自调用的匿名箭头函数,主要目的是在页面加载时执行一段代码块。让我们逐行解释:
-
()=>{ ... }
: 这是一个箭头函数的定义,它没有参数。箭头函数的主体部分包含了要执行的代码块。 -
function block() { ... }
: 这是在箭头函数中定义的名为block
的函数。该函数使用setInterval
方法来定时执行一个匿名函数,间隔为 50 毫秒。 -
Function("debugger")()
: 这行代码通过调用Function
构造函数创建了一个新的函数,并将字符串"debugger"
作为函数体。"debugger"
是 JavaScript 中的调试语句,用于在代码执行时打断点。然后立即调用这个新创建的函数,相当于在每个 50 毫秒的间隔内执行一次debugger
语句,从而在每个间隔内触发调试器。 -
try { ... } catch (err) { }
: 这是一个 try-catch 块,用于捕获可能发生的错误。在这里,block()
函数被调用,并且任何可能发生的错误被捕获并忽略。 -
()
:最外层的括号将整个箭头函数包裹起来,并立即执行它,这样在页面加载时就会执行其中的代码。
总的来说,这段代码的作用是在页面加载后,定时触发调试器(在调试模式下),以便进行代码调试。
分析过程,在代码段上打上断点。看代码是如何生成的,刷新网页,栈会变多,跟栈去看,可以看到c栈是一个webpack
这段代码的有eval函数,它的意思是
eval()
是 JavaScript 中的一个全局函数,它接受一个字符串参数,并将这个字符串当作 JavaScript 代码进行解析和执行。eval()
函数的作用可以简单总结如下:
-
动态执行代码: 可以在运行时动态地执行字符串形式的 JavaScript 代码。
-
动态生成函数: 可以将字符串形式的函数体传递给
eval()
,从而在运行时动态地生成函数。 -
作为全局作用域: 被
eval()
执行的代码会在全局作用域中执行,因此可以访问全局变量和函数。
尽管 eval()
具有灵活性,但它也存在一些潜在的风险和问题:
-
性能问题: 使用
eval()
会使得 JavaScript 引擎难以优化代码,因为它不知道在运行时会执行什么样的代码。 -
安全问题: 如果
eval()
的参数是用户输入的字符串,存在被注入恶意代码的风险,从而导致安全漏洞。 -
作用域问题:
eval()
执行的代码在全局作用域中运行,可能会覆盖或修改全局变量,导致意外的行为。
因此,在实际开发中,应尽量避免使用 eval()
,除非确实需要动态执行代码,并且能够保证安全性。通常情况下,可以考虑使用其他方式来实现相同的功能,比如使用闭包、函数构造器、setTimeout
等。
方法一:一律不在此处暂停,会使页面卡死,不适用,但适用中国天气质量网站。
方法二:在定时器运行到debugger的时候必定是true才能执行,那我们给它改成false,那么它就必不执行了。
在debugger处左侧又点击,添加条件断点,输入false,然后点击跳到下一个断点,再刷新页面即可。
方法三:Hook 就是找到代码执行的位置之前,在控制台或者添加代码段,将代码改写成无定义的形式,来过断点。
hook下断点的位置很重要