When a {{this-as}} expression gets put in a "scoping function", e.g. in a {{let}}-binding, the value bound via {{this-as}} refers to the scoping function, and not to the outer scope.
Example:
`
(def foo
(js-obj
"bar" "baz"
"getBarRight" (fn [] (this-as self (.-bar self)))
"getBarWrong" (fn []
(let [bar (this-as self (.-bar self))]
bar))))
(.log js/console (.getBarRight foo)) ;; => "baz"
(.log js/console (.getBarWrong foo)) ;; => undefined
`
Whereas {{foo.getBarRight}} expands to something like
function() {
var self = this; // this refers to foo
return self.bar; // returns "bar"
}
{{foo.getBarWrong}} on the other hand expands to
`
function() {
var bar = function() {
var self = this; // this refers to enclosing function
return self.bar; // returns undefined
}();
return bar; // returns undefined
}
`