Fe-interview: [js] js的函数有哪几种调用形式?

Created on 17 Jul 2019  ·  9Comments  ·  Source: haizlin/fe-interview

js的函数有哪几种调用形式?

js

Most helpful comment

function fn(){}

  • 正常的函数调用
    fn()
  • 作为对象方法调用
    let obj = {fn:function(){}};
    obj.fn()
  • 使用构造函数调用
    new fn()
  • 使用call或apply调用
    fn.call() || fn.apply()

All 9 comments

fn(arg1, arg2, ...)
fn.call(thisArg, arg1, arg2, ...)
fn.apply(thisArg, [arg1, arg2, ...])

其中,callapply 使得函数内的 this 被绑定到 thisArg 上。

同时可以使用 fn.bind(thisArg, ...) 来产生绑定到某个 this 的函数变体。

直接调用 fn()
自调用 (function())();
做为对象的属性调用 obj.fn()

new Xxx(),构造函数调用

function fn(){}

  • 正常的函数调用
    fn()
  • 作为对象方法调用
    let obj = {fn:function(){}};
    obj.fn()
  • 使用构造函数调用
    new fn()
  • 使用call或apply调用
    fn.call() || fn.apply()
  • 全局调用
  • 对象调用
  • call,apply调用
  • new 构造函数调用

如果是问函数自执行的方式有哪些呢?

// 1
(func (){

})()
//...
// 1. 全局调用
function fn(args){}
fn(args)

// 2. 作为对象的属性,以及作为构造函数 new 调用
Obj.prototype.fn = function(args){}
const obj = new Obj()
obj.fn(args)

// 3. call/apply/bind
fn1.call(this, arg1,arg2,...)
fn2.apply(this, [arg1, arg2, ...])

fn3 = fn1.bind(this)
fn3(arg1, arg2, ...1)

这道题主要是想考察什么了

还有 eval 大法

Was this page helpful?
0 / 5 - 0 ratings