我對JavaScript很有幫助。我試圖找出一種解決嵌套函數的方法。看看下面的兩個例子在不關閉的情況下使變量可用於異步調用
// example 1
var x = 45;
function apple(){
var y = 60;
setTimeout(function(){
console.log(y);
console.log(x);
}, 20);
}
apple();
console.log(x);
嘛價值y
保持並自setTimeout
封閉形式與功能apple()
其印在控制檯,它工作得很好。現在,就來看看下面的代碼
var x = 45;
var run = function(){
console.log(y);
console.log(x);
};
function apple(){
var y = 60;
setTimeout(run, 20);
}
apple();
console.log(x);
我只是想單獨放置函數體,並通過函數處理器的說法,但我堅持了的是我怎麼做的功能apple()
可用變量起作用run()
因爲他們不再形成關閉。有沒有一種解決方法使它成爲可能?請幫助我。
請以通用的方式回答我,以便它也適用於nodejs API。我看到setTimeout
接受更多的論點,但我希望解決方案適用於任何函數原型。
更新
很抱歉,但我認爲所有的答案做使用按值傳遞函數調用。它沒有實現關閉。他們把當前y
值,並把它作爲函數參數和假設存在的y = 80
setTimeout()
後如下面的代碼
var y = 60;
setTimeout(run, 20);
y = 80;
它打印Y = 60,而不是80內run()
的聲明。我實際上想要保持y的參考,而不是像閉包那樣捕獲它的價值。謝謝
對不起,但我不認爲上面的代碼通過引用捕獲。它實際上是通過價值獲取的。例如,假設setTimeout語句後有y = 80。 setTimeout處理程序打印60而不是80。 – user3205479
此解決方案不適用於閉包。查看我更新的問題也非常感謝 – user3205479
@ user3205479原始值總是按值傳遞。你所問的是不可能的。 – Schlaus