为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这里的getName()可以访问到setName()内部改变的name值?

为什么这里的getName()可以访问到setName()内部改变的name值?

饮歌长啸 2018-08-09 13:13:01
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


查看完整回答
反对 回复 2018-09-27
  • 1 回答
  • 0 关注
  • 745 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信