What are the pros and cons of passing *all* javascript variables (even undefined) as function arguments? [closed]

霸气de小男生 提交于 2019-12-22 05:34:09

问题


Let's take the Google Analytics Universal script as premise of the practice I am looking to clarify, validate and/or expand on:

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
</script>

Google has chosen to pass all variables as arguments instead of declaring them with var. The clear benefit in this case, is to minify the code to a maximum (avoiding the var keyword in scope and the = character repeats) with a and m being undefined... While it is common to pass an existing variable as argument, or an object into scope, passing undefined variables as argument to skip declaring them is quite unusual.

I am interesting in knowing whether there are known caveats with that approach. Particularly:

Does this use more or less memory, or is it equivalent to declared vars in the function scope?

Does it make any difference in regard to the garbage collector, and how so?

And does an increased or extensive amount of passed arguments to a function have any downsides in terms of performance?

Additional Notes: Please, NO GUESS ANSWER. I am not interested in opinion based answers. Also the question is not about passing object scope as already answered at: https://stackoverflow.com/a/4665324/1647538. So please don't answer for that particular aspect.

I am only looking for verifiable fact-based answers from javascript seasoned experts or browser implementors, with extensive knowledge of javascript compilers, and how garbage collectors work.


回答1:


Not sure about this case specifically, but injecting objects such as window and document rather than directly referencing them from inside of a function allows you to pass mock objects during unit testing.



来源:https://stackoverflow.com/questions/20673056/what-are-the-pros-and-cons-of-passing-all-javascript-variables-even-undefined

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!