美文网首页
javascript---function

javascript---function

作者: dsying | 来源:发表于2018-07-25 21:25 被阅读0次

    创建函数的5中方式

    1 具名函数

     function f(x,y){
         return x+y
     }
     f.name // f
    

    2 匿名函数

     var f
     f = function(x,y){
         return x+y
     }
     f.name // f
    

    3 具名函数赋值

    var f
     f = function f2(x,y){ 
         return x+y
      }
      f.name // f2  what fuck 什么鬼?为啥是f2
      console.log(f2) // undefined
    

    4 Function构造函数 window.Function

     var f = new Function('x','y','return x+y')
     f.name // anonymous(匿名的意思)
    

    5 箭头函数

    var f = (x,y) => {
         return x+y
     }
     //如果{}内只有一句话 则花括号和return可以同时省略
     var sum = (x,y) => x+y
     //如果()内只有一个参数,则可以省略括号
     var n2 = n => n*n
    

    函数的内存图

    function.jpg

    我们不妨模拟一下:
    函数调用的过程其实就是eval(函数体)的过程

    let f = {}
    f.param = ['x','y']
    f.fbody = 'console.log(111)'
    f.call = function(){
        eval(f.fbody)
    }
    f.call() // 111
    

    f 是一个对象,把函数体封装成一个属性,通过f.call()去执行这个函数的函数体

    call

    如何使用函数?答案:函数只能通过调用去使用,什么叫调用,英文翻译为call

       function f(x,y){return x+y}
       //语法糖
       f(1,2) //3
       //硬核玩家如何玩函数
       f.call(undefined,1,2) //3   
       // 第一种方法是js的一个语法糖,函数真正的使用方式应该是第二种,通过call调用  
    

    this 和 arguments

    this_arguments.jpg

    this :当前函数运行时所在的环境(即this的指向),也可以说 当前函数运行时所处的对象(上述中undefined在普通模式下 指向全局对象 即 Window)

    arguments: 当前函数的参数集合,它是一个类数组(likeArray)

    你会发现如果你使用f(1,2)这种方法,虽然可以看出arguments,但是不能清除的看出该函数的this指向

    普通模式下 undefined/null 会被潜规则而指向window


    this_arguments2.jpg

    严格模式下(use strict)


    this_arguments3.jpg

    scope 作用域

    scope.jpg

    是否听过这么一句话?

    如果在声明变量的时候不加var 你就是在声明全局变量
    例如:a = 3

    1. 优先认为这是一个赋值语句
    2. 它会在当前作用域寻找 a的声明,如果没有,沿着作用域树向上查找,如果全局scope也没有变量a ,只能退而求其次,先声明变量a 再执行 a=3


      ![scope2.jpg](https://img.haomeiwen.com/i10488548/10e25d86e44ae77b.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    javascript 中作用域分为 全局作用域和函数作用域
    只要有函数,就存在其对应的作用域
    寻找一个变量的作用域 遵循 就近原则

    相关文章

      网友评论

          本文标题:javascript---function

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