原语作为javascript中的函数参数

时间:2012-05-09 00:13:08

标签: javascript

我在这里学习JS,并且在作为参数传入时有关于原始值的问题。说我有一个简单的功能:

var first = 5;
var second = 6;

function func(){
    first+=second;
}
func();
alert(first); //outputs 11

所以在这种情况下,first的值变为11 ..但是如果我通过首先作为参数传递给函数来尝试它,首先保持为5 ..

var first = 5;
var second = 6;

function func(first){
    first+=second;
}
func(first);
alert(first); //outputs 5

想知道是否有人可以向我解释这一点。

4 个答案:

答案 0 :(得分:4)

这是因为当您在没有参数的情况下调用function first()时,它会使用全局变量“first”。但是当你调用function first(first)时,你说浏览器现在首先是局部变量(仅在函数内)并且它不会对全局变量first进行任何更改。这是代码:

var first = 5;
var second = 6;
function func(first){
    first += second; //Local var "first" + global var "second"
    alert(first); //Local var, outputs 11
}
func(first);
alert(first); //Global var, outputs 5

答案 1 :(得分:2)

由于Javascript的范围界定,范围变量first首先覆盖全局变量。换句话说,您将second添加到函数内的first范围内(由于您在函数内部声明了它的作用域),以及全局版本first不受影响。

如果您从该函数中删除first的声明,则Javascript会查找它可以找到的first的下一个版本 - 在本例中为全局版本。

答案 2 :(得分:1)

var first= 5;
var second= 6;

function func(first){

first+=second; // change the local first variable

}
func(first);
alert(first);//outputs 5 - the outer variable wasn't changed.

var first= 5; // global var
var second= 6;

function func(){ // first wasn't defined in the inner scope.

first+=second; // change the global bar

}
func();
alert(first);//outputs 11 - the outer variable was changed.

答案 3 :(得分:0)

Mark Linus得到了你的答案,但我想补充一个重要的注意事项。 JavaScript中的原始值总是按值传递,其中Array和Object总是通过引用传递。例如:

var first = [ 'a', 'b' ];

function func( arr ) {
    arr.push( 'c' );
}

func( first );

alert( first.join( ',' )); // output is 'a,b,c'

如果你有对象或数组中的对象,它会变得更复杂。请记住,更改会影响程序中的所有实例。