Рубрики
Без рубрики

Что это в JavaScript?

(This) в JavaScript не является ни ссылкой на саму функцию, и не является ссылкой на лексику функции (лексику в JavaScript означает, что переменная определена снаружи.

Автор оригинала: Shubham Dixit.

(This) в JavaScript не является ни ссылкой на саму функцию, и не относитсяна не относительно лексической области функции (лексическая область в JavaScript означает, что переменная, определенная вне функции, может быть доступна внутри другой функции, определенной после объявления переменной , Но наоборот не соответствует действительности; переменные, определенные внутри функции, не будут доступны вне этой функции).

Это на самом деле связывание, которое сделано при функции Призывает и то, что это ссылки определяются полностью по Call-сайт где функция называется (не там, где функция объявлена).

function foo()
{
console.log(this.a);
}
var a=2; 

В приведенной выше функции привязка по умолчанию для это применяется к функциональному вызову и так очкам это на глобальном объекте.

Переменная, объявленная в глобальном объеме в качестве VAR, являются синонимическими свойствами глобальных объектов одинакового имени

function foo()
{
"use strict";
 console.log(this.a);
}
var a=2; 
foo(); //Type Error this is undefined 

В строгом режиме глобальный объект не подходит для привязки по умолчанию, поэтому это вместо этого установлено значение undefined.

Неявное обязательство

function foo()
{
console.log(this.a);
}

var obj={
a:2,
foo:foo
}

В приведенной выше функции Foo на самом деле является свойством объекта, поэтому это неявно связан с объектом

Неявно потерян

function foo()
{
console.log(this.a)
}

var obj={
a:2,
foo:foo
}
var bar=obj.foo; //function reference alias

var a="oops ,global";

bar() ;// oops, global

Поскольку сайт вызова функции – это то, что на самом деле определяет, что будет это Указывать на то, что на вызове сайта A – «Ой, глобальные», так что это то, что на самом деле напечатано на консоли.

Используя обратные вызовы

function foo()
{
console.log(this.a);
}

function doFoo(fn)

 {
fn()//-->call site
}

var obj={
a:2,
foo:foo
}
var a="oops global";

doFoo(obj.foo); // oops global

Обратный вызов – это другая функция, передаваемая как аргумент для некоторой функции, поэтому в обратном вызове значение этого будет ссылаться на сайт, в котором этот обратный вызов называется, то есть родительская функция, на которой функция (обратный вызов) передается как аргумент.

Явная связывание

function foo()
{
console.log(this.a);
}

var obj={
  a:2
}

foo.call(obj) //2 --> giving explicit binding as we are directly stating what the this to be 

Функция .prototype.Call () Метод вызывает функцию с данным это Значение и аргументы обеспечиваются индивидуально.

Это для функций со стрелками, FAT Arrow Функции

function foo()
{
return (a)=>{
// this here is lexically inherited from foo()
console.log(this.a);
};

}

var obj1={
  a:2
}

var obj2={
  a:3
}

var bar=foo.call(obj1);

bar.call(obj2);// 2 not 3 

Функция стрелки, созданная в FOO () LEXICE PALTURES ЧТОБЫ БЫТЬ FOO () S, находящаяся в его времени вызова .since foo () Была ли это связана с OBJ1, BAR (ссылка на возвращенную функцию стрелки также будет этой связанной с OBJ1)

Ссылка – даешь не знать JS

Спасибо за прочтение .