Я хочу создать простой в использовании API для некоторых из этих функций, но не имея возможности привязать функцию к новой области I.E область, в которой она принадлежит! Я не могу понять, как сделать это иначе, чем сумасшедший ерунда или сумасшедшие вещи с этим, что делает вещи намного более запутанными.Javascript lambda scoping и кодовый факторинг
Понятно, что я теряю рассудок, потому что фильтр paramater должен запускаться в контексте выполненного обратного вызова. Я думаю, что это моя проблема, параметр фильтра не является обратным вызовом, он является параметром и должен иметь область действия, где он работает, а не там, где он определен.
Кто-нибудь, пожалуйста, скажите мне, что я просто пропустил что-то глупое.
Существуют ли какие-либо языки, которые поддерживают привязку области лямбда туда, где она вызывается, а не там, где она определена?
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;
}
});
Там нет никакого способа определить/доступа к локальной переменной с произвольным именем в текущей области. Вы можете изменить это время через 'call' /' apply' или навсегда через 'bind' (все это методы функций) – kirilloid
Я даже не мог этого сделать, потому что jQuery определяет это в функции. Вещи были бы более захватывающими, если бы я мог. – Prospero