“重新定义函数参数”来自“JavaScript简洁”

"Redefining function parameters" from 'JavaScript Succinctly'

本文关键字:参数 来自 简洁 JavaScript 函数 新定义 定义      更新时间:2023-09-26

我正在简洁地阅读JavaScript(来自Syncfusion的免费电子书),其中有一节标题为"重新定义函数参数",我不太明白。想知道是否有人可以解释发生了什么。

var foo = false;
var bar = false;
var myFunction = function(foo, bar) {
  arguments[0] = true;
  bar = true;
  console.log(arguments[0], bar);
}
myFunction();

我的印象是,函数参数,无论它们叫什么,都是本地范围的变量——即使参数名称也是全局范围变量的名称。因此,上面的代码,而不是"定义"函数参数,只是定义参数。因为,如果在调用函数后,如果您bar登录到控制台,它会记录false .所以,是的,我在这里有点困惑。是这本书错了,还是我对参数的名称和变量感到困惑?

我正在简洁地阅读JavaScript(来自Syncfusion的免费电子书)

请对你在那里读到的所有内容持保留态度。这本书讨论了 ECMAScript 3,它已经过时了。许多事情仍然是一样的(网络需要向后兼容),但有些已经改变了。

例如,在 ES5 严格模式下,使用 arguments 对象重新分配函数参数是不可能的。

我的印象是函数参数,无论它们叫什么,都是本地范围的变量

是的,这是真的。

即使参数名称也是全局范围的变量的名称。

是的,这称为阴影。为什么这些例子中有全局变量,我无法理解。

因此,上面的代码,而不是"重新定义"函数参数,只是定义参数

是的。参数确实定义了变量,并且正文中的赋值语句将它们重新分配(从undefinedtrue)。

将外部foo定义为false(此变量在此行之后永远不会触及)

var foo = false;

将外部bar定义为false;(此行之后永远不会触及此变量)

var bar = false;

定义myFunction并为其指定一个函数作为值。

该函数定义内部foo和内部bar,它们在调用函数时获取值。

var myFunction = function(foo, bar) {

重新定义内在foo的价值true

  arguments[0] = true;

重新定义内在bar的价值true

  bar = true;

记录内foo和内bar的值

  console.log(arguments[0], bar);
}

调用不带参数的myFunction,它将内部foo和内部bar定义为undefined

myFunction();