调用javascript函数时内部会发生什么?

时间:2018-06-05 12:24:34

标签: javascript node.js

我试图深入理解当我调用javascript函数时会发生什么。

我的第一个目标是在调用voila函数时记录any之类的内容。当我说任何意味着任何。让它从原型创建实例。或者让它成为一个简单的函数调用。好吧,我也不在乎我将在屏幕上看到的混乱。

像这样的东西

const oldCall = Function.prototype.call;
Function.prototype.call = function(cont, ...args) {
  console.log('voila');
  oldCall(cont, ...args);
}

以上我们都知道上面会陷入无限递归,因为oldCall再次是一个函数调用。

但这只是为了表达我的意图。

那么应该是什么样的完美方式呢?

在最糟糕的情况下,我甚至可以通过修补v8为nodejs创建一个新的自定义构建。

1 个答案:

答案 0 :(得分:0)

  

以上我们都知道上面会陷入无限递归,因为oldCall又是一个函数调用

它不会陷入困境。调用函数并调用函数的.call属性是完全不同的事情。虽然您可以重写.call属性,但您肯定无法拦截函数调用。

要正确理解.call正在做什么,请看一下这个小的polyfill:

Function.prototype.call = function(context, ...args) { // the .call property
  const fn = Symbol();
  context[fn] = this;
  context[fn](...args); // the real call
};
  

那么应该是什么样的完美方式呢?

没有办法。

  

在最糟糕的情况下,我甚至可以通过修补v8为nodejs创建一个新的自定义构建。

是的,听起来不错,玩得开心:)