美文网首页
JS里的函数

JS里的函数

作者: 加油吧_ | 来源:发表于2018-05-18 14:44 被阅读10次

    1. 五种声明方式

    1.1 具名函数
    function f(x,y) { return x+y }
    f.name // 'f'

    1.2.匿名函数
    var f;
    f = function(x,y){
    return x+y
    }
    f.name // 'f'

    1.3 具名函数赋值
    var f;
    f = function f2(x,y){ return x+y }
    f.name // 'f2'
    console.log(f2) // undefined

    1.4 window.Function
    var f = new Function('x','y','return x+y')
    f.name // "anonymous"

    1.5 箭头函数
    var f = (x,y) => { return x+y}
    var sum = (x,y) => x+y
    var n2 = n => n*n

    2. 函数的本质

    函数:可以执行代码的对象就是函数。

    函数调用:f.call(undefined,1,2)

    从第二个开始传第一个参数

    functionf(x,y){return x+y}
    f.call(undefined,1,2)   // 3
    f.call(undefined,3,4)  // 7
    

    3. this 和 arguments

    如何调用函数
    f.call(asThis, input1,input2)
    其中 asThis 会被当做 this,[input1,input2] 会被当做 arguments
    禁止使用 f(input1, input2),因为学会 .call 才能理解 this

    function f(){
        'use strict'
        console.log(this)
        console.log(arguments)
        return undefined
    }
    

    f.call(1,2,3) // this 为 1,arguments 为 [2,3]
    this: call 的第一个参数(undefined)


    this.png

    arguments:call 的后面的参数可以用arguments得到

    4. Call Stack 和 递归

    callStack1.png call Stack2.png

    5. 作用域 和 变量提升

    作用域1.png

    变量提升

    变量提升1.png

    作用域 与 变量提升的三大面试题

    1 拿到题目,先变量提升

    var a = 1;
    function f1(){
        alert(a) // 是多少
        var a = 2
    }
    f1.call()  //undefined
    

    2

    var a = 1;
    function f1(){
        var a = 2
        f2.call()
    };
    function f2(){
        console.log(a) 
    }
    f1.call()   //1
    

    3

    var liTags = document.querySelectorAll('li')
    for(var i = 0; i<liTags.length; i++){
        liTags[i].onclick = function(){
            console.log(i) // 点击第3个 li 时,打印 2 还是打印 6?
        }
    }     //6        
    

    相关文章

      网友评论

          本文标题:JS里的函数

          本文链接:https://www.haomeiwen.com/subject/pgaidftx.html