Function.length与this.length不同。为什么?

时间:2016-04-03 10:18:19

标签: javascript

这里是预期三个试验的简单功能。可以通过fmarguments.callee.length获得预期的参数数量。为什么myFunc.length返回0?不应该this.lengththis引用相同的函数对象吗?我有点困惑:)。

myFunc

1 个答案:

答案 0 :(得分:3)

  

与其他语言相比,函数的this关键字在JavaScript中的行为略有不同。它在严格模式和非严格模式之间也有一些区别。在大多数情况下,其值取决于函数的调用方式。它不能在执行期间通过赋值设置,并且每次调用函数时它可能不同。 ES5引入了bind方法来设置函数的值,无论它是如何被调用的,ECMAScript 2015引入了箭头函数,这些函数的词法作用域(它被设置为封闭执行上下文的this值)。[{{3} }]

在您的方案中: this属于我们正在执行的function的所有者,或属于object我们正在调用的方法。 (如何调用函数)

在您的示例中,myFunc的所有者为windowwindow.myFunc("a","b");),因此this.length == 0。如果您在控制台中打开window对象,则会发现length属性的值为0

要在调用this时拥有自己的function参数,请使用Ref call()方法调用具有给定此值的函数并提供参数单独

function myFunc(a, b, c) {
  console.log(arguments.callee.length, myFunc.length, this.length);
}
myFunc.call(myFunc, "a", "b"); //=> prints 3 3 3
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>