這是一個關於Javascript和Node的常見問題。假設我有一個是這樣一個功能:Javascript函數聲明和關閉
function outer(a,b){
function inner(){
console.log(a[b]);
}
inner();
}
外部函數將被多次使用,它有這樣的觀點,因爲我不想使用全局變量。 每次我調用外部函數時,都會聲明內部函數嗎? 如果每次都聲明它,有沒有辦法讓代碼更高性能而不使用全局變量?
這是一個關於Javascript和Node的常見問題。假設我有一個是這樣一個功能:Javascript函數聲明和關閉
function outer(a,b){
function inner(){
console.log(a[b]);
}
inner();
}
外部函數將被多次使用,它有這樣的觀點,因爲我不想使用全局變量。 每次我調用外部函數時,都會聲明內部函數嗎? 如果每次都聲明它,有沒有辦法讓代碼更高性能而不使用全局變量?
如果不使用靜態(在JS情況下爲全局變量)變量,函數將在每次都被聲明。這裏的方法是使封裝了功能的對象:我希望我明白你的問題,代碼是太微不足道承擔更多的你想要什麼
var AnObject = function(a,b) {
this.a = a;
this.b = b;
this.foo = function() {
return this.a[this.b];
};
};
function outer(a,b) {
var inner = new AnObject(a,b);
console.log(inner.foo());
}
。
謝謝!這是我正在尋找的。 – user3806501
地獄不??現在你不僅創建一個函數,而且每次調用'outer'時都會創建一個對象*和*函數。 – Bergi
我剛剛用鉻引擎進行了內存檢查,調用外部10000次。當內部函數被定義在外部函數內部時,它假定你需要一個內聯函數(內聯像C++一樣)。如果你在調用之外定義了對象,那麼你正在使用引用,編譯器的工作量比所討論的代碼要小。 – Alex
功能inner
時便會在每次調用outer
時間宣佈我認爲你可以只寫
function outer(a,b){
console.log(a[b]);
}
而且沒有全局變量。
你必須假設代碼'控制檯。log'不在那裏,而是一個更復雜的代碼。 – Alex
將內部函數聲明我每次調用外部函數的時間?
是。但是,這並不是那麼低效,並且通過引擎進行了很好的優化。
如果每次都聲明,有沒有辦法讓代碼更高性能,而不使用全局變量?
比它需要的是不要讓你的代碼變得更加複雜。如果它能夠正常工作並且可以維護,請保持原樣。 outer
可能會經常被調用很多次,但除非它是一個非常熱的路徑,並且您通過基準測試確定這是一個性能瓶頸,則無需採取措施。不成熟的優化是萬惡之源。
但是,回到你的問題:是的,有辦法避免功能的娛樂,而無需使用全局變量。只是傳遞inner
需求作爲參數傳遞給每一個電話的值:
function inner(a,b){
console.log(a[b]);
}
function outer(a,b){
inner(a,b);
}
假設內部函數不分配到封閉變量這個效果很好。
如果要避免將inner
置於全局範圍內,只需使用module pattern即可創建outer
。
你沒有回到內在的功能嗎?爲什麼不直接調用'console.log'? – MinusFour
你正在尋找執行內部函數,還是你關心返回/保存爲異步調用? – Amit
我想從內部函數返回值.'a'和'b'最初是全局變量,但現在我意識到有時需要更改值才能使'內部'正常工作。 - 不希望'a'和'b'全局改變,所以我將它封裝在一個外部函數中。現在我擔心表演。 – user3806501