最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

javascript - Why assign this variable to itself in this var declaration? - Stack Overflow

matteradmin3PV0评论

I was reading Ben Cherry's "JavaScript Module Pattern: In-Depth", and he had some example code that I didn't quite understand. Under the Cross-File Private State heading, there is some example code that has the following:

var _private = my._private = my._private || {}

This doesn't seem to be different from writing something like this:

var _private = my._private || {}

What's happening here and how are these two declarations different?

I was reading Ben Cherry's "JavaScript Module Pattern: In-Depth", and he had some example code that I didn't quite understand. Under the Cross-File Private State heading, there is some example code that has the following:

var _private = my._private = my._private || {}

This doesn't seem to be different from writing something like this:

var _private = my._private || {}

What's happening here and how are these two declarations different?

Share Improve this question edited Nov 29, 2011 at 19:27 jcolebrand 16k12 gold badges77 silver badges122 bronze badges asked Nov 29, 2011 at 19:11 JoeM05JoeM05 9222 gold badges10 silver badges27 bronze badges 2
  • 1 We are obviously missing context but the second example does not set my._private... :-? – Álvaro González Commented Nov 29, 2011 at 19:27
  • @ÁlvaroG.Vicario you're correct in that the second example is not the same as the first. – jcolebrand Commented Nov 29, 2011 at 19:30
Add a ment  | 

1 Answer 1

Reset to default 7
var _private = my._private = my._private || {}

This line means use my._private if it exists, otherwise create a new object and set it to my._private.

More than one assignment expression can be used in a statement. The assignment operator uses (consumes) whatever is to the right of it and produces that value as its output to the left of the variable being assigned. So, in this case, with parentheses for clarity, the above is equivalent to var _private = (my._private = (my._private || {}))

This case is a type of lazy initialization. A less terse version would be:

if (!my._private) {
    my._private = {};
}
var _private = my._private;

In this case, it seems that the lazy initialization is more used for anywhere initialization than laziness. In other words, all functions can include this line to safely create or use my._private without blowing away the existing var.

Post a comment

comment list (0)

  1. No comments so far