Javascript 关于arguments,内存泄露,高阶函数等面试中常问题目(1)

404 阅读1分钟

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函数就是高阶函数