![](/img/trans.png)
[英]How can I not use arguments.callee when I need to access a variable?
[英]Why can't I access arguments.callee in this sloppy-mode function?
我正在尝试访问下面简单函数中的arguments.callee
属性,但我无法访问,因为该函数引发了错误。
function foo(a = 50, b) { console.log(arguments.callee); } foo(10, 50);
为什么会这样? 该函数似乎在严格模式下运行,但这怎么可能,因为我没有提到语句'use strict';
我在 Chrome 上运行这个。
如果您在函数声明中使用高级(现代,ES6+)语法,则arguments
对象会像在严格模式下一样自动创建 - 在您的情况下,它是默认参数初始化器。 该函数实际上不是严格模式 - 例如,您仍然可以在with
使用with
语句,但arguments
对象不再向后兼容 ES5 之前的代码。
请参阅有关FunctionDeclarationInstantiation的说明:
映射参数对象仅提供给没有剩余参数、任何参数默认值初始值设定项或任何解构参数的非严格函数。
除了不再有.callee
,它也不反映对参数变量的赋值(这总是相当令人惊讶,请参阅JavaScript:为什么更改参数变量会更改 `arguments`“数组”?或更改 JavaScript 函数的参数使用参数数组的值不起作用)。
基本上arguments.callee
已被ES5 弃用,但为了向后兼容,该语言只能在您选择使用现代语法时选择不提供它,例如使用严格模式或非简单参数声明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.