2016-08-31 42 views
1

正則函數聲明和Javascript中的內部返回塊函數聲明有什麼區別?Javascript中的正常函數聲明和內部返回塊函數聲明的區別

下面的代碼正常功能名稱:updatename,內部函數名稱:changeName

function person(firstName,lastName,age,eyeColor) { 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.age = age; 
    this.eyeColor = eyeColor; 

    this.updatename = function (name) { 
     this.lastName = name; 
    } 

    return { 

     'changeName' : function (name) { 
      this.lastName = name; 
     } 
    }; 

} 
var myMother = new person("Sally","Rally",48,"green"); 

console.dir(myMother); 

console.log(typeof(myMother.changeName)); 

console.log(typeof(myMother.updatename)); 

myMother.changeName("Doe"); 
+1

這不是一個返回塊。這是一個對象文字。 – slebetman

+0

如果註釋掉正常函數並執行上面的代碼typeof(myMother.changeName)返回函數。 – balamuruganv

+0

他們都是功能。從語言的角度來看沒有區別。他們來自不同的範圍,但是就是這樣。 – vlaz

回答

1

如果你從一個函數返回一個對象,然後調用的是,與new一個構造函數,該函數的原this拋出離開,忽略和失去。換句話說,在這個世界上,this.firstName的價值永遠不會再次獲得。你想通過返回對象字面值來完成什麼?

JavaScript中正常函數聲明和內部返回塊函數聲明有什麼區別?

差(假設你的意思方法聲明)是正常的聲明做了什麼你通常會想象它會怎麼做。 「內部返回阻止函數聲明」覆蓋並取消原始值this,而是用一種方法返回JUST THAT OBJECT,這可能不是您想要的。