JS的五种函数调用方式

490 阅读2分钟

这不是茴字的五种写法!

圆括号调用

不需要多说,百分之九十的日常调用就是这样的。

IIFE(立即调用函数表达式)

我们可以定义一个匿名函数,然后立即调用这个函数,这样做有什么用呢?这个匿名函数拥有独立的词法作用域。这不仅避免了外界访问此 IIFE 中的变量,而且又不会污染全局作用域。

Function.prototype.call() 调用

函数也是对象,他有一个方法,call() 方法,可以使用这个方法调用这个函数。

语法:function.call(thisArg, arg1, arg2, ...)

  • 第一个参数是this值,如果你不知道this,可以看我之前写的文章
  • 后面的参数是 传给函数的实参

这种函数调用可以让你自己明确指定传入的this

Function.prototype.apply() 调用

语法:func.apply(thisArg, [argsArray])

  • 第一个参数是this值
  • 后面的参数以数组的形式传递,是函数的实参

这其实和call方法没有什么不同,只是在语法上有点差异。

new 运算符

在用构造函数的时候,你一定很熟悉这种用法。

实际上,你也可以对普通的函数使用new去调用,就像这样:

当你new调用一个函数的时候,实际上有以下步骤:

  • 创建一个空的简单JavaScript对象(即{});
  • 链接该对象(即设置该对象的构造函数)到另一个对象 ;
  • 将步骤1新创建的对象作为this的上下文 ;
  • 如果该函数没有返回对象,则返回this

通常通过new实例化一个对象。

总结

这并不是为总结而总结,更不是茴字的多种写法,是我对JS函数在学习过程中的一点思考和总结,要搞清楚每一种背后的原理和使用场景。