var createPet = function(name) { return { setName: function(newName) { name = newName; }, getName: function() { return name; } } }var pet=createPet("nie"); alert(pet.getName()); //nie pet.setName("ying"); alert(pet.getName()); //ying为什么这个无法改变b的值?而上面的name可以被改变?var b=10; function ch(num) { num=200; } ch(b); document.write(b); //10
1 回答
芜湖不芜
TA贡献1796条经验 获得超7个赞
JavaScript里,function的参数是可变的,存在arguments里,你定义的参数名,相当于var了一个变量,以下两个写法是相等的:
function doSomething(name, age) { //...}function doSomething() { var name = arguments[0],
age = arguments[1]; //...}这么说吧,JavaScript引擎是这么理解你的代码的
var createPet = function() {
var name = arguments[0]; // 这里定义了一个name变量 return {
setName: function(newName) { name = newName;
},
getName: function() { return name;
}
}
}
}name定义在createPet闭包里
同理,你补充的代码,num定义在ch()里,且传进来的不是引用类型,所以不能改变外面的变量。
var b=10; function ch() { var num = arguments[0]; // 这里定义了num
num=200;
}
ch(b); document.write(b); //10添加回答
举报
0/150
提交
取消
