Я где-то создаю функцию и привязываю ее к this, чтобы я мог использовать значение this родительского блока в качестве значения this внутри функции. Например:
var foo = function() {
// some stuff involving other stuff
}.bind(this);
this, который я передаю в качестве аргумента bind, передается по ссылке или по значению? Итак, если я изменю параметры объекта this немного позже во внешнем блоке кода, а затем вызову foo, будет ли foo использовать значение this в то время, когда я звонил bind, или когда я звонил foo?
Все в JavaScript передается по значению, точка. Передача ссылки по значению - это не то же самое, что передача по ссылке.
Привет, @ibrahimmahrir. Большинство языков программирования высокого уровня реализуют передачу по ссылке как передачу указателя по значению. Совершенно ясно, что я спрашиваю не об этом, и поэтому это не очень помогает. Мне очень жаль, но я действительно не понимаю, что вы здесь пытаетесь внести.
@wchargin См. выше ^
Это не правда. Он вообще не реализует передачу по ссылке. В этом случае, независимо от того, передается ли this по ссылке или по значению, свойства объекта, на который он указывает, будут одинаковыми, потому что существует только один объект. Если вы действительно не спрашиваете то, что спрашивали, вам следует изменить вопрос на то, что вы спрашиваете.
@fgb Я не спрашиваю, в чем теоретическая, техническая или симантическая разница между передачей по значению и передачей по ссылке. Независимо от того, является ли передача по значению единственным техническим способом передачи аргументов в JavaScript, передача объектов - это передача по ссылке эффективно, когда кто-то смотрит на конечный результат.
Нет, это не имеет никакого отношения к прохождению. Как вы думаете, что делает var a = this;?
@fgb Вы упускаете суть - вопрос не имеет ничего общего с тем, как JavaScript «передача по ссылке» фактически реализуется за кулисами.
@ Зак Что? Я только что сказал.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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. Остается тот же объект; однако его свойства могут измениться.
Если вы измените значение объекта 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());
Технически есть нет передача по ссылке в javascript. Хотя
this- это ссылка на ваш объект, поэтому вы передаете ссылку на свой объект функции, поэтому, если вы изменитеthisвнутри функции, исходный объект также будет изменен.