2013-07-27 99 views
3

我正在學習使用各種書籍的JavaScript,並且我注意到我無法找到關於何時使用return的恰當解釋。據我所知,你使用它時,你想從一個函數返回一個值,但隨後有象這樣的例子在Javascript:好的部分:什麼時候在javascript中使用'return'

var quo = function(status) { 
    return { 
     get_status: function() { 
      return status; 
     } 
    }; 
}; 

var myQuo = quo("amazed"); 

document.writeln(myQuo.get_status()); 

爲什麼狀態已經被當它已經可以返回到現在的功能作爲一個參數?換句話說,爲什麼只是簡單地

return { 
    get_status: status; 
} 

不工作?

頁面後立即對又如:

var add_the_handlers = function(nodes) { 
    var helper = function(i) { 
     return function(e) { 
      alert(i); 
     }; 
    }; 
    var i; 
    for (i = 0; i<nodes.length; i+=1) { 
     nodes[i].onclick = helper(i); 
    } 
}; 

爲什麼我們在函數中返回警報(我),而不是簡單地把警報(我)?

+1

我認爲你把延遲執行與即時混淆了。 'function(){alert()}'和'alert()'不是一回事。另外,如果你將其設置爲'get_status:status',那麼現在它是一個屬性而不是方法(所以'myQuo.get_status'而不是'myQuo.get_status()'),並且是隻讀的而不是可修改的。 –

+1

示例二:您不想立即發出警報,稍後要警告......您不會返回警報(I),而是返回一個調用alert的函數。 –

+0

爲什麼它將「e」傳遞給該函數? –

回答

10
return { 
    get_status: status 
} 

不會定義一個getter,這是一個返回基礎值的函數。它只會定義一個屬性。

你可以使用它作爲

var status = quo.get_status; 

而且任何用戶可以改變與

quo.get_status = 'new status directly changed'; 

其中一個原因狀態使用

return { 
    get_status: function() { 
     return status; 
    } 
}; 

是,它使status私人:quo對象的用戶不能更改內部在quo對象財產,他們只能用

var status = quo.get_status(); 
1

你在這個例子中看到的是關閉演示(see)和status被保存在對象內部,如私有變量。

1

讀它,我不會說爲什麼代碼,因爲它是 - 它似乎過於複雜,我too-但低於事物的技術方面:

return { 
    get_status: function() { 
     return status; 
    } 
}; 

這將物業GET_STATUS返回一個函數,每當他高興現狀的調用者可以調用(x.get_status())。

return { 
    get_status: status; 
} 

這不是有效的JavaScript,如果你把它調整到

return { 
    get_status: status 
}; 

現狀會返回一個對象名爲GET_STATUS而不是單個字符串屬性。這也會起作用!您將簡單地檢索不同的值。

看看下面的(不是很優雅)的jsfiddle:http://jsfiddle.net/edw6a/1/

1

舉例來說如果你想添加的status一些限制的第一個例子可能是有用的。注意,get_status並不意味着從quo之內調用。

var quo = function(status) { 
    return { 
     get_status: function() { 
      return status; 
     } 
     set_status: function(newValue) { 
      if (newValue === 2 || newValue === 0) { 
       status = newValue; 
      } 
     } 
    }; 
}; 

第二個是「函數製造者」的一個例子。根據傳遞的值,助手將返回一個不同的函數。稍後,該示例綁定這些「製作」的功能以單擊事件。簡單地寫alert(i);會在循環中創建警報。

相關問題