2012-03-12 56 views
0

我想創建一個簡單易用的API到這些函數中,但無法將函數綁定到新的範圍I.E它的範圍!我無法想出一個辦法去做那些瘋狂的胡言亂語,或者做這些讓事情變得更加混亂的瘋狂事情。Javascript lambda範圍和代碼分解

從概念上講,我迷失了我的想法,因爲過濾器參數應該在完成回調的上下文中運行。我想這是我的問題過濾器參數不是一個回調它是一個參數,應該有它的運行範圍,而不是它定義的地方。

有人請告訴我,我只是錯過了一些愚蠢的東西。

是否有任何語言支持將lambda的範圍綁定到被調用的位置,而不是其定義的位置?

var scrape = function(selector, filter) { 
    jsdom.env({ 
     html: data, 
     src: [ jQuery ], 
     done: function(errors, window) { 
      var $ = window.$; 
      eval('filter=' + filter.toString()); 
      debugger; 
      var entries = $(selector).filter(filter); 
      console.log('spo'); 
      debugger; 
     } 
    }); 
}; 

scrape('p',function(index) { 
    debugger; 
    if(this.children.length == 3) { 
     return $(this.children[0]).is('a') && 
       $(this.children[1]).is('font') && 
       $(this.children[2]).is('span'); 
    } else { 
     return false; 
    } 
}); 
+0

有沒有辦法在當前範圍內定義任意名稱/訪問局部變量。你可以通過'call' /'apply'或者永久地通過'bind'(所有這些都是函數的方法)來改變this''臨時值 – kirilloid 2012-03-12 10:37:54

+0

我甚至不能這樣做,因爲jQuery在函數中定義了這個。如果可能的話,事情肯定會更加激動人心。 – Prospero 2012-03-12 10:42:58

回答

0

不能完全確定你的代碼做了什麼,而是通過你的描述,你正在尋找$.proxy。它將回調綁定到特定的上下文。如果您使用下劃線,你會看_.bind

文檔:http://api.jquery.com/jQuery.proxy/

+0

應該提到這是在服務器上。我重新聲明過濾器函數使用toString和eval給它我認爲它應該有的範圍。 – Prospero 2012-03-12 10:37:11