1.arguments
function test(){
//此时你会发现,即使声明函数时没有传入形参,在函数实际调用中传入参数,这些参数就是argument
//arguments会以类数组的形式存在
console.log(arguments) //输出 Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
}
test(1,2,3)
2.内存泄漏 常见的内存泄漏有这些
(1).闭包
(2).意外全局变量
//举个简单的例子
function GlobalVar(){
let a = b =0
//可知在JS赋值中,从右向左进行,而此时b在函数中并没有声明定义,故在JS执行引擎中,会给b创建一个全局的变量和空间。
//或者
c = 0 // 相当于执行了一句 window.c = 0
}
(3).没有及时关闭的定时器
(4).脱离引用的DOM,例子如下:
//在一个对象或者字典及数组中对某个DOM进行获取和引用
var button = {btn:document.getElementById("btn")}
function test(){
//此时为第二个引用,第一个引用就是已经在html页面渲染时的DOM树中已经存在
button.btn.click()
}
\
function removeChildElement(){
//此时仅仅将html渲染的DOM树内的DOM元素删除,并未将在button对象里引用的DOM彻底删除
document.body.removeChild(document.getElementById("btn"))
}
3.高阶函数
本质就是函数里面的参数为函数或者函数里返回值为一个函数,如下代码
funciton test(arg,func){
return func(arg)
}
function fun(a){
console.log(a)
}
test(1,fun)
//以上情况的test函数就是高阶函数