我可以在JQuery中使用lambda表达式吗?

时间:2011-02-11 00:51:06

标签: javascript jquery lambda anonymous-function

jQuery lambda functions中,用户询问如何在JQuery中调试lambda表达式。我搜索了很多网站,我无法在JQuery中找到lambda表达式的例子。有谁知道这是否可能,如果有的话我在哪里可以找到一些例子?

9 个答案:

答案 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扩展方法(例如whereorderby等)。

答案 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之外,它都可以在每个地方使用。