javascript - 为什么这里的getName()可以访问到setName()内部改变的name值?
本文介绍了javascript - 为什么这里的getName()可以访问到setName()内部改变的name值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
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
解决方案
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
这篇关于javascript - 为什么这里的getName()可以访问到setName()内部改变的name值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文