cod*_*boy 3 javascript arguments
我试图访问arguments.callee下面的简单函数中的属性,但我无法访问,因为该函数抛出错误。
function foo(a = 50, b) {
console.log(arguments.callee);
}
foo(10, 50);Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?看起来该函数正在严格模式下运行,但是这怎么可能,因为我没有提到该语句'use strict';
我在 Chrome 上运行这个。
arguments如果您在函数声明中使用高级(现代,ES6+)语法,则会像严格模式一样自动创建对象 - 在您的情况下,它是默认参数初始化程序。该函数实际上并不是严格模式 - 例如,您仍然可以with在其中使用语句,但该arguments对象不再向后兼容 ES5 之前的代码。
请参阅FunctionDeclarationInstantiation的注释:
映射参数对象仅提供给没有剩余参数、任何参数默认值初始值设定项或任何解构参数的非严格函数。
除了不再有 a 之外.callee,它也不再反映对参数变量的赋值(这总是相当令人惊讶,请参阅JavaScript: Why does moving an argument variablechange the `arguments` "array"?或更改 JavaScript 函数的参数值使用参数数组不起作用)。
ES5基本上arguments.callee已弃用,但为了向后兼容,该语言只能在您选择使用现代语法(例如使用严格模式或非简单参数声明)时选择不提供它。
| 归档时间: |
|
| 查看次数: |
627 次 |
| 最近记录: |