gpt4 book ai didi

javascript - "use strict"和函数调用中的命名参数

转载 作者:行者123 更新时间:2023-11-30 07:54:10 24 4
gpt4 key购买 nike

一位同事建议我将 "use strict"; 添加到我的 JS 代码的顶部,以突出显示我定义中的任何空白和潜在的引用错误等。我对此非常满意,因为它已经识别出几段代码,这些代码可能已经成为问题。

但是,另一位同事建议我,在调用带有多个参数的函数时,按照指定的方式命名参数会很有帮助,尤其是当它是一堆 bool 值时。为了说明,这里有几个函数调用:

logData(data, target, preserveLog=true, changeClass=false, wrapLine=false);

...比以下内容更清晰:

logData(data, target, true, false, false);

但是 "use strict"; 讨厌这个。在我这样做的任何地方,我都会在控制台中收到引用错误。正如预期的那样,它仍然运行良好,但控制台现在乱七八糟地堆满了所有这些显然 undefined reference 。

有没有人知道是否有办法解决这个问题,以便我可以保留我的同事欣赏的编码约定,或者我将不得不停止使用 "use strict"; 或通过我所有的代码并删除参数名称?

谢谢。

最佳答案

However, another colleague advised me that when calling functions which take multiple arguments, it can be helpful to name the arguments as they are specified, especially if it's something like a bunch of booleans.

这是个糟糕的建议!

Javascript 实际上并不支持以这种方式按名称传递参数。您“按名称”传递的每个参数实际上都被视为对具有该名称的全局变量的赋值,“use strict” 正确地将此识别为错误。

如果您想更清楚地了解您传递的是什么值,请将这些值分配给真正的局部变量并传递它们,例如

var preserveLog = true;
var changeClass = false;
var wrapLine = false;
logData(data, target, preserveLog, changeClass, wrapLine);

如果您真的想继续使用您的原始模式,您甚至可以在函数调用中为这些变量赋值,只要您首先将它们声明为局部变量:

var preserveLog, changeClass, wrapLine;
logData(data, target, preserveLog=true, changeClass=false, wrapLine=false);

(向 dav_i 致敬 this answer, which I based my recommendation off of 。)

关于javascript - "use strict"和函数调用中的命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44694065/

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