我通过 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
。所以,是的,我在这里有点困惑。这本书是错的还是我对参数感到困惑'名称和变量?
答案 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
对象重新分配函数参数是不可能的。
我的印象是函数参数,无论它们被调用,都是本地范围的变量
是的,那是真的。
即使参数名称也是全局范围变量的名称。
是的,这称为阴影。为什么这些例子中存在全局变量,这让我无法理解。
所以,上面的代码,而不是'重新定义'函数参数只是定义参数
是。参数确定了变量,并且正文中的赋值语句重新分配它们(从undefined
到true
)。