While I agree with Harlan's overall advice (i.e. don't use something unless you understand it), I would add:
Environments are a fundamental concept in R, and in my view, extremely useful (in other words: they're worth understanding!).  Environments are very important to understand issues related to scope.  Some basic things that you should understand in this context:
- search(): will show you the workspace; environments are listed in order of priority.  The main environment is .GlobalEnv, and can always be referenced as such.
- ls(): will show you what's contained in an environment
- attach/- detach: creates a new environment for an object
- get,- assign,- <<-, and- <-: you should know the difference between these functions
- with: one method for working with an environment without attaching it.
Another pointer: have a look at the proto package (used in ggplot), which uses environments to provide controlled inheritance.  
Lastly, I would point out that environments are very similar to lists: they can both store any kind of object within them (see this question).  But depending on your use case (e.g. do you want to deal with inheritance and priority), a list can be easier to work with.  And you can always attach a list as an environment.
Edit: If you want to see an example of proto at work in ggplot, have a look that the structure of a ggplot object, which is essentially a list composed partially of environments:
> p <- qplot(1:10, 1:10)
> str(p)
List of 8
 $ data       :'data.frame':    0 obs. of  0 variables
 $ layers     :List of 1
  ..$ :proto object 
 .. .. $ legend     : logi NA 
 .. .. $ inherit.aes: logi TRUE 
...
> class(p$layers[[1]])
[1] "proto"       "environment"
> is.environment(p$layers[[1]])
[1] TRUE
Notice how it's constructed using proto and is containing many environments as a result.  You can also plot the relationships in these objects using graph.proto.