在jQuery lambda functions中,用户询问如何在JQuery中调试lambda表达式。我搜索了很多网站,我无法在JQuery中找到lambda表达式的例子。有谁知道这是否可能,如果有的话我在哪里可以找到一些例子?
答案 0 :(得分:6)
使用Lambda表达式(除其他外)作为指定anonymous functions(也称为匿名委托或匿名方法)的简写。也就是说,指向你即时定义的函数的指针。
请参阅此常见的JQuery Ajax示例:
$.ajax({
url: "test.html",
context: document.body,
success: function(){
$(this).addClass("done");
} });
success 参数使用Javascript的动态函数定义和指针。 所以,是的,javascript中的匿名函数有一种lambda语法。实际上,这与VB.NET's lambda syntax非常相似,对表达式树和匿名函数都非常有用:
Dim newNinjaList = NinjaList.Where(Function(n) n.primaryWeapon = "dagger")
所以,你可以说JQuery中有一个lambda语法,虽然很多人认为它不够优雅。
如果你指的是lambda表达式来指定expression trees,那么答案很简单:不,JQuery不对表达式树使用任何类型的lambda语法。
答案 1 :(得分:3)
JavaScript实际上没有lambda表达式,因为您必须显式返回一个值。像ruby这样的语言会自动返回最后一个语句的值,但在JavaScript中这不起作用:
var double = function(i) { i * 2; }
var x = double(5);
但如果你在那里添加回报就可以了。
var double = function(i) { return i * 2; }
答案 2 :(得分:1)
您在JS中寻找的术语是“匿名函数”,例如
$(function() {
/* in an anonymous function that is passed
to the jQuery document ready handler */
});
具体来说,匿名功能部分是
function() { /* whatever */ }
答案 3 :(得分:0)
jQuery是Javascript编程语言的扩展。据我所知,javascript中没有lambda支持。你看到的不是lambda表达式,而是函数链接和传递函数作为第一类对象,就像Func一样。 Lambdas不是javascript语言规范。
答案 4 :(得分:0)
我认为他们引用了一个vanilla回调语法,他们遇到的具体问题与Visual Studio如何调试JavaScript有关。
这就是我认为他们所说的'lambda'
$.get('http://...').on('data',
function(data) {
...
}
);
答案 5 :(得分:0)
您可能对http://jslinq.codeplex.com/项目感兴趣。虽然这实际上并没有为javascript带来真正的lambda语法,但它允许您在任何数组上使用linq
扩展方法(例如where
,orderby
等)。
答案 6 :(得分:0)
自ECMAScript 6(2015年6月)问世以来,您可以使用“箭头运算符”,这样就可以了:
$(()=>{
alert("Hello arrow.");
});
...至少在现代Chrome,Firefox,Edge和Opera中,根据https://kangax.github.io/compat-table/es6/#test-arrow_functions。
请注意,箭头功能在被调用的函数中没有设置“this”,因此与良好的旧匿名函数相比,它们作为事件处理程序并不是很好:
<a href="#">Click me</a>
<script>
$('a[href="#"]')
// arrow function:
.click((event)=>{
event.preventDefault();
alert("arrow: "+(this==window)); // 'this' is window, not the <a>.
})
// anonymous function:
.click(function(event) {
event.preventDefault();
alert("anonymous: "+this.tagName); // 'this' is <a>.
});
</script>
答案 7 :(得分:0)
是的,但是箭头在IE11中不起作用,如“ let”。 http://kangax.github.io/compat-table/es6/
$("#CountrySelect").on("change", "#countrySelect", null, e => {
let that = $(e.target); //$(this);
if (that.val() !== "" && window.localStorage) {
localStorage.setItem("countrySelect", String(that.val()));
}
if (that.val()) {
$.ajax({
type: "POST",
url: urlControlSwitchLanguage,
data: {
language: that.val()
},
success: (data) => {
if ("error" in data) {
$("#mainDataBodyTable").empty();
$("#mainDataBodyTable").append(`<div>${data.error}</div>`);
console.error(data.error);
} else {
$("#mainDataBodyTable").empty();
countTableElement = createTable$(data, countTableElement);
$("#linkDownloads").attr("href", urlControlGetFile + "?language=" + that.val());
}
},
error: (xhr, ajaxOptions, thrownError) => {
console.log(xhr);
console.log(ajaxOptions);
console.log(thrownError);
}
});
}
答案 8 :(得分:0)
使用此代码:
lstResource.find(x => x.Module == Module && x.Form == Form && x.ResourceName == Resource).Value
除了IE之外,它都可以在每个地方使用。