Welcome! Please see the About page for a little more info on how this works.

0 votes
in ClojureScript by

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.


(def foo

"bar" "baz"
"getBarRight" (fn [] (this-as self (.-bar self)))
"getBarWrong" (fn []
                (let [bar (this-as self (.-bar self))]

(.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

1 Answer

0 votes
Reference: https://clojure.atlassian.net/browse/CLJS-719 (reported by alex+import)