看代码输出:
1.
function test(a){
a=a+10;
}
var a=10;
test(a);
console.log(a);
输出:10
2.
function test(){
a=a+10;
}
var a=10;
test(a);
console.log(a);
输出:20
3
function f(x) {
console.log(x);
var x = 200;
console.log(x);
}
f(a = 100);
console.log(a);
输出:100 200 100
知识点:
- 变量a为number类型,属于基本数据类型,基本数据类型在传参时,通过拷贝值进行传递。因此,在函数内部修改形参时,不会对实参产生影响
- 如果没有以参数的形式传入函数内,函数体内的变量a又没有使用var声明,这时候就会暴露为全局变量,第二题输出
20。 - 函数参数传递的是值,而不是逻辑,
f(a=100),相当于var a=100; f(a); - 但是如果是修改的一个引用类型,又没有var声明,不管你是参数的形式传入,还是没有参数直接修改,都会改变。
function test(obj){
obj.c=8;
}
var obj= {c:9};
test(obj);
console.log(obj); // {c:8}
function test(){
obj.c=8;
}
var obj= {c:9};
test(obj);
console.log(obj); // {c:8}