It creates a namespace containing objects defined in the R script file. So:
# script.R
foo <- function(x) x + 1
source_as_ns("bar", "script.R")
bar::foo(1)
# 2
Apart from the "why not using a package/namespace" points, are there other reasons not to use a function like this to avoid polluting the Global Env. and have the functions in the script available for use?
If you're only doing this locally on your system, it's completely up to you. However, there would obviously be a few things to consider.
What packages the functions in the namespace rely on, you'd have to ensure these are loaded further up the search() path.
Where on the search() path this is going to go, and how will that effect any packages loaded after your new namespace.
Naming conflicts: make sure your new namespace is unique (maybe check that the new name doesn't match any other packages).
How would this behave if ran on a different system?
There are probably plenty of other questions that you should ask before implementing something like this in a workflow. But if it works for you, go for it.