<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div id="example"></div>
<script type="text/javascript">
function add(){
var ss = '3';
function odd(){
console.log(this);
return '1';
}
odd();
}
add();
</script>
</body>
</html>
为什么这里的this 指向 window ? 我是看到作用域链的时候,实际在调用odd方法时创建了上下文,this为什么指向window?
首先要清楚 odd
并不是一个方法,只有当函数作为对象的属性调用时,才称之为方法
//方法
o.add();
//函数
add();
当函数作为方法被调用时
this
的指向是调用函数的对象(除非显式的被修改)当函数直接被调用时
this
指向window
(在严格模式中指向undefined
)
补充:
当函数作为构造函数被调用时(使用
new
),this
指向一个新对象,这个新对象的原型指向构造函数的prototype
属性
//构造函数
new Add();
函数如果不是使用 new
运行或者是使用 apply
、call
、bind
方法的话,this都指向全局对象(有的环境没window所以这么说)
你要指向的话请 new odd();
这里要搞明白函数的定义:包括在花括号的代码块。既然是代码块,又不是构造函数creat一个新对象,那么再复杂的函数,里面的this也指向全局对象
this永远都指向调用该方法的对象