全局this
浏览器宿主的全局环境中,this
指的是window
对象。
<script type="text/javascript">
console.log(this === window); //true
</script>
浏览器中在全局环境下,使用var
声明变量其实就是赋值给this
或window
。
<script type="text/javascript">
var foo = "bar";
console.log(this.foo); //logs "bar" console.log(window.foo); //logs "bar"
</script>
任何情况下,创建变量时没有使用var
或者let
(ECMAScript 6),也是在操作全局this
。
<script type="text/javascript">
foo = "bar";
function testThis() {
foo = "foo";
}
console.log(this.foo); //logs "bar" testThis();
console.log(this.foo); //logs "foo"
</script>
除了DOM的事件回调或者提供了执行上下文(后面会提到)的情况,函数正常被调用(不带new
)时,里面的this
指向的是全局作用域。
<script type="text/javascript">
foo = "bar";
function testThis() {
this.foo = "foo";
}
console.log(this.foo); //logs "bar"
testThis();
console.log(this.foo); //logs "foo"
</script>
原文:http://www.cnblogs.com/zhaoleigege/p/4775305.html