Передается ли .bind (this) по ссылке или по значению?

Я где-то создаю функцию и привязываю ее к this, чтобы я мог использовать значение this родительского блока в качестве значения this внутри функции. Например:

var foo = function() {
    // some stuff involving other stuff
}.bind(this);

this, который я передаю в качестве аргумента bind, передается по ссылке или по значению? Итак, если я изменю параметры объекта this немного позже во внешнем блоке кода, а затем вызову foo, будет ли foo использовать значение this в то время, когда я звонил bind, или когда я звонил foo?

Технически есть нет передача по ссылке в javascript. Хотя this - это ссылка на ваш объект, поэтому вы передаете ссылку на свой объект функции, поэтому, если вы измените this внутри функции, исходный объект также будет изменен.

ibrahim mahrir 14.04.2018 20:59

Все в JavaScript передается по значению, точка. Передача ссылки по значению - это не то же самое, что передача по ссылке.

wchargin 15.04.2018 00:59

Привет, @ibrahimmahrir. Большинство языков программирования высокого уровня реализуют передачу по ссылке как передачу указателя по значению. Совершенно ясно, что я спрашиваю не об этом, и поэтому это не очень помогает. Мне очень жаль, но я действительно не понимаю, что вы здесь пытаетесь внести.

hitecherik 15.04.2018 01:10

@wchargin См. выше ^

hitecherik 15.04.2018 01:10

Это не правда. Он вообще не реализует передачу по ссылке. В этом случае, независимо от того, передается ли this по ссылке или по значению, свойства объекта, на который он указывает, будут одинаковыми, потому что существует только один объект. Если вы действительно не спрашиваете то, что спрашивали, вам следует изменить вопрос на то, что вы спрашиваете.

fgb 15.04.2018 01:23

@fgb Я не спрашиваю, в чем теоретическая, техническая или симантическая разница между передачей по значению и передачей по ссылке. Независимо от того, является ли передача по значению единственным техническим способом передачи аргументов в JavaScript, передача объектов - это передача по ссылке эффективно, когда кто-то смотрит на конечный результат.

hitecherik 15.04.2018 01:37

Нет, это не имеет никакого отношения к прохождению. Как вы думаете, что делает var a = this;?

fgb 15.04.2018 01:42

@fgb Вы упускаете суть - вопрос не имеет ничего общего с тем, как JavaScript «передача по ссылке» фактически реализуется за кулисами.

Zak 15.04.2018 01:48

@ Зак Что? Я только что сказал.

fgb 15.04.2018 01:49
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
9
358
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

So if I change the parameters of the this object a bit later in the outer block of code, and afterwards call foo, will foo use the value of this at the time I called bind, or at the time I called foo?

в то время, когда вы вызывали foo.

this - это Справка к объекту. Это означает, что в какой-то момент Object может измениться, и вы получите его «свежие - актуальные» значения.

Я бы сказал, что значение this будет одинаковым как во время привязки, так и при вызове foo. Остается тот же объект; однако его свойства могут измениться.

rhino 15.04.2018 01:05

Если вы измените значение объекта this, то foo получит новое значение this во время вызова foo.

var module = {
  x: 42,
  getX: function () {
    return this.x;
  }
}

var retrieveX = module.getX;
console.info(retrieveX()); // The function gets invoked at the global scope
// expected output: undefined

var boundGetX = retrieveX.bind(module);
module.x = 52;
console.info(boundGetX());

Другие вопросы по теме