这些是什么;这";在这个JavaScript代码中是什么意思? 测试 (功能(){ //这个 var测试=函数(){ //这个 返回函数(){ //这个 }; } (功能(){ //这个 变量a={ p1:函数(){ //这个 } }; })(); })();

这些是什么;这";在这个JavaScript代码中是什么意思? 测试 (功能(){ //这个 var测试=函数(){ //这个 返回函数(){ //这个 }; } (功能(){ //这个 变量a={ p1:函数(){ //这个 } }; })(); })();,javascript,scope,this,Javascript,Scope,This,而非此作为注释 在范围链意义上,它将从底部函数中的this一直移动到全局this e、 把这个放进去 <!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" conten

而非
作为注释

在范围链意义上,它将从底部函数中的
this
一直移动到全局
this

e、 把这个放进去

<!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>
然后这个在上面

p1:function(){
       //this
   }
然后在它上面的
这个

(function(){
  //this
  var a={
   p1:function()

雅虎的Nicholas Zakas在

上对它做了一个很好的介绍
这个
的意义取决于包含它的函数是如何调用的,而不是它是如何构造的

有一个很好的解释它是如何工作的

简短的版本是,当你调用一个函数(m)作为对象(o)的方法时,那么
这个
就是
o

 (function(){
    // this
    var test=function(){

DavidDorward已经提到了Douglas Crockford的JavaScript:The Good Parts

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

调用函数将挂起 当前功能的执行, 将控件和参数传递给 新功能。除了 声明的参数,每个函数 接收两个附加参数: 这是一个有争议的问题。此参数的值为 这在面向对象中非常重要 编程,其价值是 由调用模式决定。 有四种调用模式 在JavaScript中:方法调用 模式,函数调用 模式,构造函数调用 模式和应用调用 图案不同的模式有不同的方式 奖金参数是 初始化

Crockford继续解释每个模式中“this”的绑定,如下所示:

方法调用模式:当函数存储为对象的属性时,我们称之为方法。当调用一个方法时,它被绑定到该对象

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

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


应用调用模式:应用方法允许我们构造一个参数数组,用于调用函数。它还允许我们选择这个的值。apply方法采用两个参数。第一个是应该绑定到此的值。第二个是参数数组。

最好看一下javascript闭包,了解作用域和此指针分配的作用域。“这”甚至在面向对象编程之前就已经出现了,但对它来说绝对是必不可少的

这在很大程度上取决于作用域链在标识符中的角色 解析等对象上属性名称的解析

闭包的简单解释是ECMAScript允许内部 功能;函数定义和函数表达式 函数内部预示着其他函数


在变量对象上创建的与 声明的局部变量最初被指定为未定义的值 在变量实例化过程中,本地变量的实际初始化 在对相应的变量进行求值之前,变量不会发生 函数体代码执行期间的赋值表达式

事实上,激活对象及其参数 属性和变量对象,并具有相应的命名属性 对于函数局部变量,是同一个对象,这允许 将标识符参数视为本地函数 变数

最后,分配一个值用于该关键字。如果 赋值指的是一个对象,然后是前缀为属性访问器的对象 使用此关键字引用该对象的属性。如果 赋值(内部)为空,则this关键字将引用 指向全局对象

全局执行上下文的处理方式略有不同 它没有参数,因此不需要定义的激活 对象来引用它们。全局执行上下文确实需要 范围及其范围链正好由一个对象组成,即全局对象 对象全局执行上下文不通过变量 实例化时,其内部函数是正常的顶级函数 构成大部分javascript代码的声明。全球 对象用作变量对象,这就是全局声明 函数成为全局对象的属性。全球也是如此 声明的变量

全局执行上下文还使用对全局执行上下文的引用 此对象的对象。 承蒙 第章:标识符解析、执行上下文和范围链


请注意,包含的Javascript可能没有广告中所宣传的简单。条款和条件适用。报价在加拿大无效。只是复制粘贴一些代码并不能构成一个好问题-1关于“调用”调用模式(
fn.call(context,arg1,arg2,…argn)
)?@gion_13,就
而言,它相当于“应用调用模式”,
var o = {
   m: function () {
      return this;
   }
}

var foo = {
    bar: o.m;
}

o === o.m();
foo === foo.bar();