//1st question var x = 4, obj = { x: 3, bar: function() { var x = 2; setTimeout(function() { var x = 1; alert(this.x); }, 1000); } }; obj.bar(); //2nd question function foo(a) { arguments[0] = 2; alert(a); } foo(1); 1.why it returns 4 instead of 1? i thought this.x refer to 1, but it seems wrong....i just dont understand why it returns 4
2.why it return alert 2 instead of 1, i thought i pass a to function a, and as far as i know, i pass 1 to function foo, and 1 should be alerted because of a(which is 1 when i pass)....i just don't understand why it alert 2
thisand you will see that it is referring to the window. on that level x has been defined as 4. This is all about scoping. check out this article, especially the part aboutthisinside of closures ;) javascriptissexy.com/…