1. There is no difference between the first one and the third one. The this in obj.inner.print (), points to obj.inner.num
.
2. The fourth
first of all, you need to know that the copy operation returns the assigned value
var a;
console.log(a = 5); //5
so the result of (obj.inner.print = obj.inner.print)
is a function with the content
function () {
console.log(this.num);
}
run this function globally, and the this in it points to window, so the result of (obj.inner.print = obj.inner.print) ();
) is
.
var num = 100;
function () {
console.log(this.num);
}()
// 100
looking at the answer, the main confusion lies in the third formula. In fact, it is easy to understand, do not be involved in the second and fourth.
the second is an assignment, and the assigned func is just a function reference, which loses the context information of the function, so it ends up running
in the global context.
Why not the fourth one? The reason is that the side effect of the assignment expression
: the assignment expression returns the value to the right of the equal sign! So the result of the entire assignment expression is a function that also loses its context. So the result is the same as 2. If you replace the equal sign with a comma, you will get the same result, because the comma expression has the same side effect.
what's the problem with looking at 3pr 3 again? No problem! Because include! Number! no! Yes! Deputy! Do it! Use
! You said it would return an expression, an expression is an expression, and whatever, alone looks at the parenthesis of the first formula and the part before it is also an expression, isn't it?
post other people's blog answers . I think starfish
is the "mentioned on the home page of banner to thoroughly understand the this mechanism in JS
explain it in the way" you don't understand js ":
first, third, implicit binding. This binds to inner object
two and four are default bindings, and this binds to window object