Javascript это ключевое слово - внутри функции

javascript this

566 просмотра

1 ответ

Я пытаюсь понять thisключевое слово на Javascript .

Я проводил некоторые тесты на консоли Chrome и обнаружил два разных результата, которые, как я ожидал, будут одинаковыми:

var myTest = {};
myTest.test1 = function() {
        return this; // this = Object
}

Эта первая функция возвращает myTestобъект, который я понимаю.

var myTest = {};
myTest.test1 = function() {
    return function test2() {
        return this; // this = Window
    }
}

Почему вторая функция возвращает окно вместо myTestобъекта?

Спасибо

Автор: Christopher Bailey Источник Размещён: 12.11.2019 09:03

Ответы (1)


5 плюса

thisссылается на текущий объект, для которого вызывается функция. Когда вы позвонили test1, вы бы сделали так

myTest.test1()

Теперь test1вызывается на myTestобъекте. Именно поэтому thisотносится к myTestпервому случаю.

Во втором случае вы бы выполнили так

myTest.test1()()

myTest.test1()возвращает функцию, и вы вызываете без какого-либо текущего объекта. В этом случае JavaScript будет гарантировать, что thisбудет ссылаться на глобальный объект ( windowв этом случае).

Примечание: но, в строгом режиме, thisбудет undefined, во втором случае. Вы можете подтвердить, что, как это

var myTest = {};
myTest.test1 = function() {
    return function test2() {
        console.log("this is global", this === window);
        console.log("this is undefined", this === undefined);
        return this;
    }
}

myTest.test1()();

Выход будет

this is global true
this is undefined false

Но если вы включите, use strictкак это

"use strict";

var myTest = {};
myTest.test1 = function() {
    return function test2() {
        console.log("this is global", this === window);
        console.log("this is undefined", this === undefined);
        return this;
    }
}

myTest.test1()();

Выход будет

this is global false
this is undefined true
Автор: thefourtheye Размещён: 07.04.2014 11:14
Вопросы из категории :
32x32