JS-函数

作者: 小废柴JH | 来源:发表于2019-08-14 18:27 被阅读0次

1.定义
(1)匿名函数
(2)具名函数
(3)箭头函数,无this

  1. 词法作用域(也叫静态作用域)
    JS看到上面的代码不是立马去执行,而是去构造词法树,也就是一个函数能访问那些变量在做词法分析的时候就以及确定了。词法作用域只能确定变量是那个变量,但是不能确定变量的值。

  2. call stack
    (1) 普通调用 1+1+1
    (2) 嵌套调用 1>2>3
    (3) 递归

  3. this & arguments
    (1) this 就是 call 的第一个参数!call 的其他参数统称为 arguments
    (2) this 是隐藏的第一个参数,且一般是对象(如果不是对象,就显得很没有意义了)。那么this 为什么必须是对象?即使传入的不是对象,比如是数字,也会被new Number一下,变成一个对象,因为 this 就是函数与对象之间的羁绊。

  4. call / apply
    (1)fn.call(asThis, p1,p2) 是函数的正常调用方式。
    (2)当你不确定参数的个数时,就使用 apply,fn.apply(asThis, params)
    (3)也就是确定参数个数的时候使用call,不确定参数个数的时候使用apply,这也是它们俩的区别。比如当我们去遍历一个数组求和,就算数组很小,但是使用call的话就如:sum.call(undefined, a[0],a[1],a[2]...),这个写就显得很智障了。
    (4)若单独的函数(fn)没有依赖于对象,当调用fn.call()的时候,不传参数,this就是window,传了参数this就是call的第一个参数,一般不想指定this,可以使用undefined来占位,否则就会出现把我们想传的参数,默认第一个为this了。

  5. bind
    call 和 apply 是直接调用函数,而 bind 则是返回一个新函数(并没有调用原来的函数),这个新函数会 call 原来的函数,call 的参数由你指定。

  6. return
    每个函数都有 return。如果你不写 return,就相当于写了 return undefined。

  7. 柯里化 / 高阶函数
    (1)

  //柯里化之前
  function sum(x,y){
      return x+y
  }
  //柯里化之后 ,类似于偏函数
  function addOne(y){
      return sum(1, y)
  }

柯里化可以将真实计算拖延到最后再做:柯里化大多数是在模板引擎里面使用,大部分是用来惰性求值,如调用一个函数什么都没做,就是return了一个函数。若对一个字符串做很重的操作,如正则,ajax,要是直接声明就调用就显得麻烦,那么就可以在真正使用的时候再去调用,如在第二次调用的时候才生效,这样就是惰性求值。
(2)高阶函数:
在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:

  • 接受一个或多个函数作为输入:如forEach sort map filter reduce。
  • 输出一个函数:如lodash.curry。
  • 不过它也可以同时满足两个条件:如Function.prototype.bind。
  1. 回调
    名词形式:被当做参数的函数就是回调,还有一个隐含条件就是,这个被当作参数的函数得call一下,这个call就是callback,若不call就不是callback了。
    动词形式:调用这个回调。
    注意回调跟异步没有任何关系。

  2. 构造函数
    返回对象的函数就是构造函数,一般首字母大写。

相关文章

  • JS-函数

    事件驱动模型: 事件(操作,动作) 事件类型(具体的动作类型) 事件源(发生动作的地方) 事件监听器(监听事件发生...

  • JS-函数

    1.定义(1)匿名函数(2)具名函数(3)箭头函数,无this 词法作用域(也叫静态作用域)JS看到上面的代码不是...

  • JS-函数

    1.函数基础 函数参数 函数写法:function func(){}var func=function(){}经常...

  • JS-函数

    函数1.声明 function 函数名(参数1,参数2...){ 函数体 retur...

  • js-函数

    函数

  • js-工具函数

    日常总结 秒转时分秒

  • Js-函数-6.1

    1 :Try{}catch(){}finally{}catch会捕获到前面抛出的异常,无论是直接抛出的还是函数调用...

  • js-函数进阶

    函数(function)把要执行的代码放入函数里面,使其函数里面的代码反复被使用,减少了大量代码累跌 函数的基本书...

  • 关于 JS-函数

    1. 函数声明和函数表达式有什么区别 函数声明就是定义一个函数,如以下例子 function text(){ //...

  • js-函数练习

    函数练习

网友评论

      本文标题:JS-函数

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