gpt4 book ai didi

javascript - 使用 arguments 伪参数作为可写的东西

转载 作者:数据小太阳 更新时间:2023-10-29 04:34:52 25 4
gpt4 key购买 nike

在 javascript 中,有这样的东西 arguments伪参数,允许动态地与函数参数交互。现在,当我在听关于 javascript 基础知识和标准的讲座时,有一句话:

“不要将 arguments 用作可写结构,始终将 is 视为只读的东西”

我从来没有使用arguments在那里写,所以这对我来说不是问题 - 但是,真的 - 我想问我的

问题:在使用arguments 编写时是否有任何实际用例是合理的?如果不是,那为什么不应该使用 arguments 在那里写呢?

最佳答案

假设您很生气并且想要自定义 console.log 以便执行

console.log("window.innerWidth");

会记录

window.innerWidth = 775 

这看起来比做起来更方便

console.log("window.innerWidth =", window.innerWidth);

你可以通过构建一个新数组来“正确地”做到这一点,或者你可以重用 arguments :

(function(){
var stdlog = console.log;
console.log = function(){
if (arguments.length===1 && typeof arguments[0]==="string") {
try {
arguments[1] = eval('('+arguments[0]+')');
arguments[0] += " =";
arguments.length = 2;
} catch (e) {} // in case it can't be evaled, do the normal thing
}
stdlog.apply(console, arguments);
};
})();

console.log("window.innerWidth"); // window.innerWidth = 775
console.log("Hello"); // Hello

在这里重用arguments 的好处是在不需要时不必构建数组并且不会重复调用stdlog。没有那个 hack,代码就不会那么枯燥了。

现在,为什么你不应该做这种事情:

  • arguments 没有像数组那样被设计成可写的,我必须明确地设置 arguments.length
  • 简单地将 arguments 对象切片并传递生成的数组是相当容易的,因为反正任何可访问的函数都不需要 arguments 对象
  • 以不打算使用的方式使用 native 结构可能会导致 future 的不兼容
  • 它会阻止优化。 JS 引擎做了很多优化,没有这些优化,许多现代网络应用程序将无法实现。他们在极少数情况下放弃优化,并且 some of them are related to arguments
  • 它在严格模式和非严格模式下的工作方式不同。如果添加(可能通过在缩小过程中连接文件)到具有 "use strict" 的文件,您真的想要一个会有细微不同行为的函数吗?

这是一个严格模式改变一切的例子:

function incrNumber(v) {
arguments[0]++;
console.log(v)
}

在严格模式下,传递的值被记录下来。在非严格模式下,增加的值被记录下来。和 that's the specified behavior .

关于javascript - 使用 arguments 伪参数作为可写的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25303171/

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