我正在嘗試將函數範圍傳遞給回調方法。我遇到的問題是我正在獲取對象範圍,它不能提供我訪問原始函數中的參數和局部變量的權限。我對「this」的理解是指當前的上下文(不管是窗口還是某個對象),以及本地聲明的變量和參數。 [引用Richard Cornford在http://jibbering.com/faq/notes/closures/關於「執行上下文」部分的出色工作]。我也明白,JavaScript中的變量具有函數作用域(如果它們是在函數內部聲明的,它們只能從該函數中訪問)。將範圍傳遞給回調函數/綁定
有了這樣的理解,在一個新的環境中,我試圖編寫一個模式,我爲我以前的僱主做了很多,調用異步方法,指定一個回調處理程序並傳遞當前作用域,期望它可用在回調方法中。我目前的環境中並沒有發現這種情況。 (披露:我在以前的環境中使用ExtJS ......現在讓我覺得我對這個框架感到非常舒適,並對發生的事情做出了假設)。
我的簡單測試代碼演示了我正在嘗試做什麼以及什麼不起作用。
function myHandler(data, ctx) {
console.log('myHandler(): bar: ' + bar); // <- prob: bar undefined
console.log(JSON.stringify(data));
}
MySvcWrap = {
doWork: function(p1, callback, scope) {
var result = {colors: ['red', 'green'], name:'Jones', what: p1};
if (callback) {
callback.call(scope||this,result, scope);
}
}
}
function lookup() {
var bar = 'food'; // local var
MySvcWrap.doWork('thang', myHandler, this); // scope object is this
}
lookup();
這裏的問題是傳遞給MySvcWrap.doWork的'this'在這種情況下是Window全局對象。我的意圖是將函數的執行上下文傳遞給myHandler。
我試過了。如果,而不是「這個」,我傳遞一個對象,這樣的作品,如:
function myHandler(data, ctx) {
console.log('myHandler(): this.bar: ' + this.bar); // <- no prob: this.bar
console.log(JSON.stringify(data));
}
function lookup() {
var bar = 'food'; // local var
MySvcWrap.doWork('thang', myHandler, {bar: bar}); // scope object is just object
}
我需要有人來俱樂部我在這裏頭......路過的時候「這」在我的第一種情況下,當然這是全局範圍(我在一個全局定義的函數中)......我的問題是,當我傳遞範圍時,我想過我可以訪問本地定義的變量和參數w /在這種情況下...我是否在搖擺我之前的理解JS的?如何完成這項任務?
我喜歡的參數處理器方法。 – 2015-06-03 04:38:11