찾다

 >  Q&A  >  본문

JavaScript的this对象不是函数的内部对象吗?

书中说this是函数内部的一个特殊对象。那么应该说this只存在于函数的内部,但是在全局情况下,直接对this和arguments进行输出:

1

2

<code>console.log("try this:"+this);

console.log("try arguments:"+arguments);</code>

输出结果是:

1

2

<code>try this:[object Window]

Uncaught ReferenceError: arguments is not defined</code>

arguments同为函数内部的对象,在全局进行直接输出是显示的是未定义。
求解!

大家讲道理大家讲道理2902일 전710

모든 응답(3)나는 대답할 것이다

  • 天蓬老师

    天蓬老师2017-04-10 16:14:24

    1)arguments是在函数内才是有效的,可以认为是一个函数的属性对象,而不是任何对象都有的
    2)在浏览器环境下,全局对象为window,在nodejs环境下,全局对象为global
    3)以下代码,你可以得到你想要的

    1

    2

    3

    4

    <code>(function(){

        console.log("try this:"+this);

        console.log("try arguments:"+arguments);

    }());</code>

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-10 16:14:24

    官方说法:
    “JavaScript可以允许使用this关键字来引用全局对象”——《JavaScript权威指南》P58最后一行文字。
    this是函数的一个关键字,是函数内部的一个特殊对象,没错,但没有说this只存在于函数的内部!事实上,在全局运行上下文中(在任何函数体外部),this 指代全局对象(浏览器中全局对象是window)。

    1

    2

    3

    4

    5

    <code>Uncaught ReferenceError: arguments is not defined

    在全局作用域内没有定义arguments这个变量,所以报错,和是不是函数内部的对象无关,如果定义了就不会报错了。

    var arguments = 2;

    console.log(arguments);//输出2

    </code>

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-10 16:14:24

    1

    2

    3

    4

    5

    6

    <code>function aa(){

        console.log(arguments);

        console.log(this);

    }

    a();//输出[],window

        </code>

    浏览器环境,
    arguments只有在函数内生效,
    this在函数调用内指向浏览器的window对象

    회신하다
    0
  • 취소회신하다