简单谈谈javascript中this的隐式绑定

前端之家收集整理的这篇文章主要介绍了简单谈谈javascript中this的隐式绑定前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我们先来看一个例子

this指向了obj,因为foo执行时的call-site(可以理解为调用时所在作用域)在obj上面。注意是运行的时候,和在哪里声明的没有关系。

call-site and call-stack

call-site姑且理解为调用域,call-stack为调用栈。如下代码可以辅助我们理解

console.log( "baz" );
bar(); // <-- call-site for bar
}

在baz()中调用bar(),所以bar的调用域是baz,此时bar的调用栈只有baz;而baz本身暴露在全局作用域中,所以它的调用域则也在全局作用域中。

`bar` // so,our call-site is in `baz` console.log( "bar" ); foo(); // <-- call-site for `foo` } function foo() { // call-stack is: `baz` -> `bar` -> `foo` // so,our call-site is in `bar` console.log( "foo" ); } baz(); // <-- call-site for `baz`

理解之后再回头看开头的例子,是不是感觉清晰了很多。其实this只是指向了它的call-site

还有如下玩法:

虽然bar引用了obj上的foo,但实际上相当于是直接对foo引用而已,所以会默认绑定到全局。

猜你在找的JavaScript相关文章