为什么参数不能在函数外保留其值?

时间:2016-03-21 12:53:54

标签: javascript

以下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来说太新了,无法提供真正优秀的谷歌查询或了解高级答案。

2 个答案:

答案 0 :(得分:3)

  

这种奇怪行为的解释是什么?

因为在Javascript变量中是函数作用域。

您从未将ab传递给myTest方法。您通过了8和5,因此ab属于myTest签名的一部分获得了新的范围。 a变为8,b变为myTest内的5。

a内的bmyTest的值不会在外部使用,因为它们的范围仅限于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)