gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:01:13 24 4
gpt4 key购买 nike

我试图在下面的简单函数中访问 arguments.callee 属性,但我无法访问,因为该函数会抛出错误。

function foo(a = 50, b) {
console.log(arguments.callee);
}

foo(10, 50);

为什么会这样? 看起来函数运行在严格模式下,但怎么可能,因为我没有提到语句 'use strict';

我在 Chrome 上运行它。

最佳答案

如果您在函数声明中使用高级(现代,ES6+)语法,则会像在严格模式下一样自动创建一个 arguments 对象 - 在您的情况下,它是默认参数初始化器。该功能实际上不是严格模式 - 例如您仍然可以在其中使用 with 语句,但是 arguments 对象不再向后兼容 ES5 之前的代码。

参见 note on FunctionDeclarationInstantiation :

A mapped argument object is only provided for non-strict functions that don't have a rest parameter, any parameter default value initializers, or any destructured parameters.

除了不再有 .callee 之外,它也不反射(reflect)对参数变量的赋值(这总是相当令人惊讶,请参阅 JavaScript: why does changing an argument variable change the `arguments` "array"?Changing JavaScript function's parameter value using arguments array not working)。

基本上 arguments.callee 已被 ES5 弃用,但为了向后兼容,该语言只能在您选择现代语法时选择不提供它,例如使用严格模式或非简单参数声明.

关于javascript - 为什么我不能在这个草率模式函数中访问 arguments.callee?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68143291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com