为什么这里的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


饮歌长啸
浏览 746回答 1
1回答

芜湖不芜

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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript