我在这里学习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
想知道是否有人可以向我解释这一点。
答案 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)
var first = [ 'a', 'b' ];
function func( arr ) {
arr.push( 'c' );
}
func( first );
alert( first.join( ',' )); // output is 'a,b,c'
如果你有对象或数组中的对象,它会变得更复杂。请记住,更改会影响程序中的所有实例。