请解释下面的JavaScript语句?

这个问题在这里已经有了答案:

  • JavaScript关闭如何工作? 88个答案
  • 为什么你需要在同一行上调用匿名函数? 19个答案

  • 此代码相当于:

    function Ninja() {
        // nothing here
    }
    
    var ninja = new Ninja();
    

    尽管在你列出的代码中,函数/对象Ninja不是全局范围。

    代码(function() {...})(); 基本上说“把这里面包含的任何函数都包含进来,然后立即执行”。 所以它创建了一个匿名函数并在之后调用它。


    它被称为立即调用函数表达式(或IIFE)。 它创建一个新的范围并立即执行内容。 它有很多用途; 我使用最多的是当this关键字会改变含义,例如

    var someClass = function() {
        this.property = something;
        this.update = (function(obj) {
            function() {
                $('.el').each(function() {
                    $(this).html( obj.property );
                });
            };
        )(this);
    };
    

    虽然我想在$('.el').each()引用this.property ,但this改变该范围内的含义,并引用当前正在使用.each()循环的DOM元素。 所以通过将this参数作为参数传入IIFE(并调用参数obj ),我可以使用obj.property来引用在$('.el').each( ..., function() { ... });范围之外的this.property $('.el').each( ..., function() { ... });

    让我知道如果这是有道理的,或者如果你有任何问题:)


    为什么函数声明封装在'('s中,并且为什么最后还是有'();'

    它同时声明和执行函数。

    你可能会看到:被命名的函数表达式被揭秘 - 由Juriy“kangax”Zaytsev

    链接地址: http://www.djcxy.com/p/1475.html

    上一篇: Explain the following JavaScript statement?

    下一篇: What is wrong with my javascript scope?