"重新定义功能参数"来自JavaScript的简洁'

时间:2016-02-26 13:44:01

标签: javascript

我通过 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。所以,是的,我在这里有点困惑。这本书是错的还是我对参数感到困惑'名称和变量?

2 个答案:

答案 0 :(得分:-1)

将外部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();

答案 1 :(得分:-1)

  

我正在阅读JavaScript(一种来自Syncfusion的免费电子书)

请把你在那里读到的所有东西都带上一粒盐。那本书讨论了严重过时的ECMAScript 3。许多事情仍然是相同的(网络需要向后兼容),但有些已经改变。

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

  

我的印象是函数参数,无论它们被调用,都是本地范围的变量

是的,那是真的。

  

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

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

  

所以,上面的代码,而不是'重新定义'函数参数只是定义参数

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