以下JS代码表现得很奇怪:
var c = 0;
var a = 0;
myTest(8, 5);
function myTest(a,b) {
console.log(a);
a++;
c++;
console.log(a);
return a;
}
console.log(a);
console.log(c);
https://jsfiddle.net/hwns1v4L/
如果我采取" a"参数超出函数," a"增加1,第三个控制台日志返回" a"为1.完全正常。但是,如果我保持" a"作为myTest函数中的参数(如上面的代码所示),它获取值8,递增1到9,第三个控制台日志返回零。
这种奇怪行为的解释是什么?如果在另一个帖子中解释这个,我很抱歉;我对JS来说太新了,无法提供真正优秀的谷歌查询或了解高级答案。
答案 0 :(得分:3)
这种奇怪行为的解释是什么?
因为在Javascript变量中是函数作用域。
您从未将a
和b
传递给myTest
方法。您通过了8和5,因此a
和b
属于myTest
签名的一部分获得了新的范围。 a
变为8,b
变为myTest
内的5。
a
内的b
和myTest
的值不会在外部使用,因为它们的范围仅限于myTest。
答案 1 :(得分:1)
在您的函数中,您有一个本地a
参数。因此,您对该值所做的任何更改都不会反映您全局定义的a
。由于您未在函数内部创建c
变量或参数,因此您将更改全局c
值。
var c = 0; // Global c
var a = 0; // Global a
var b = myTest(8, 5); // Store the value of the local a from the function return.
function myTest(a,b) {
console.log(a); // This a is a local reference (8)
a++; // Increment local a
c++; // Increment global c
console.log(a); // Print local a (9)
return a; // Return local a
}
console.log(a); // Print global a (0)
console.log(c); // Print global c (1)
console.log(b); // Print returned value (9)