繁体   English   中英

为什么我不能在这个草率模式函数中访问arguments.callee?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM