First look at this two running results are not the same as the first two are 3 behind is 10
var length = ten; var arr = [function() {Console.log (this. length);},2,3];arr[0] ();(arr[ 0]) ();(function() {Console.log (this. length);}) (); var tmpfun = arr[0];tmpfun ();
About this sentence arr[0]! = (function () {console.log (this.length);}) () They are not equal
This arr[0] is no longer taken out of the element to think that this element is an executable function arr[0] () equivalent to obj.xxx () This is the ARR
PS so why Arr[0] () and (arr[0]) [0] is the same? You can see this http://www.cnblogs.com/cart55free99/p/4189226.html.
If A.B is a function encountered (A.B) () The compiler will remove the parentheses that are executed with A.B ()
var length = ten; function fn () { Console.log (this. length);} var obj = { 5, function(FN) { fn (); arguments[0] ();
So this topic output 10, 2 2 is the length of the arguments
this. operator and [] operator