通过 as 参数和不带参数访问函数内部的变量有什么区别?
var a = 1;
var b = 2;
function x() {
var c = a + b;
console.log(c)
}
function y(a, b) {
var c = a + b;
console.log(c)
}
最佳答案
这里的关键区别在于 y
不使用提供给函数的参数以外的任何东西。只要你看到函数调用 - 比如说 y(1, 2)
- 你确切地知道会发生什么。 (至少假设您相当熟悉该功能及其作用 - 但即使您不熟悉它,希望它有一个足够清晰的名称。)
与 x
的对比是从外部(这里是全局)变量中读取的a
和 b
.换句话说,它依赖于未明确提供给函数的输入。这使得理解对 x()
的调用变得更加困难。可以,因为它取决于 a
的值和 b
- 它可能在程序中被分配相当远的距离。事实上,也许它们的值可以通过不同的方式和通过其他函数来改变——在这种情况下,不可能确切地知道 x()
是什么。直到那次电话 session 之前,都不需要仔细研究整个程序。同样,将其与 y
进行对比。我们只需要查看调用站点,无需其他任何内容。
然而,在某些实际情况下,很难避免某种“全局状态”,尽可能避免它,并尝试将函数所需的信息保留在其本地——如 y
- 毫无疑问是更好的设计。它使代码更容易理解,因此不太可能出现错误。
关于javascript - 通过作为参数传递和全局变量访问函数内部变量之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52300038/