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
提交
取消