这里是预期三个试验的简单功能。可以通过fm
或arguments.callee.length
获得预期的参数数量。为什么myFunc.length
返回0?不应该this.length
和this
引用相同的函数对象吗?我有点困惑:)。
myFunc
答案 0 :(得分:3)
与其他语言相比,函数的
this
关键字在JavaScript中的行为略有不同。它在严格模式和非严格模式之间也有一些区别。在大多数情况下,其值取决于函数的调用方式。它不能在执行期间通过赋值设置,并且每次调用函数时它可能不同。 ES5引入了bind方法来设置函数的值,无论它是如何被调用的,ECMAScript 2015引入了箭头函数,这些函数的词法作用域(它被设置为封闭执行上下文的this值)。[{{3} }]
在您的方案中: this
属于我们正在执行的function
的所有者,或属于object
我们正在调用的方法。 (如何调用函数)
在您的示例中,myFunc
的所有者为window
(window.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>