亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么這里的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 關注
  • 790 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號