这个"代码"在这个JavaScript代码中意味着什么?

use*_*580 -2 javascript scope this

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        <title>test</title>

    </head>
    <body>
        <script type="text/javascript" charset="utf-8">
            (function(){
                // this
                var test=function(){
                    //this
                    return function(){
                        //this
                    };
                }

                (function(){
                    //this
                    var a={
                        p1:function(){
                            //this
                        }
                    };
                })();
            })();
        </script>       
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

Vij*_*Dev 14

David Dorward已经提到了道格拉斯·克罗克福德的JavaScript:The Good Parts.

从那本优秀的书的第4.3节:

调用函数会暂停当前函数的执行,将控制和参数传递给新函数.除了声明的参数之外,每个函数还接收两个附加参数:this和arguments.此参数在面向对象编程中非常重要,其值由调用模式决定.JavaScript中有四种调用模式:方法调用模式,函数调用模式,构造函数调用模式和apply调用模式.这些模式在初始化奖励参数的方式上有所不同.

Crockford继续解释这些模式中"this"的绑定,如下所示:

方法调用模式:当函数存储为对象的属性时,我们将其称为方法.调用方法时,它绑定到该对象.

函数调用模式:使用此模式调用函数时,它将绑定到全局对象.这是语言设计中的一个错误.

构造函数调用模式:如果使用新前缀调用函数,则将创建一个新对象,其中包含指向函数原型成员值的隐藏链接,并且这将绑定到该新对象.

Apply调用模式: apply方法允许我们构造一个用于调用函数的参数数组.它还让我们选择了它的价值.apply方法有两个参数.第一个是应该绑定的值.第二个是参数数组.