函数的作用域与this指向是js中很重要的一部分,理清这点东西需要个逻辑,看看我的逻辑怎么样...
下面是个提纲,可以直接挑你感兴趣的条目阅读。
• 函数的定义方式:直接定义(window下,内部定义),对象的方法,对象原型的方法;
• 函数的调用方式:直接调用,call/apply,with
• 对于直接定义的函数和对象的方法,作用域默认状态下是它的定义处的作用域链。
• 对于直接定义的函数,this指向window。
• 对于对象的方法,this指向实例化对象(对应于实例化对象默认返回this的情况)。
• 用call/apply改变方法的this指向
下面分开来具体说说:
函数的定义,如提纲中提到的可以分为两种:直接定义(window下,内部定义),对象的方法(或对象原型的方法)。从下面的示例代码中可以看到函数fn1与fn2以及对象的方法doFunction在函数使用name时name的值来自相应的域。
<div class="jb51code">
<pre class="brush:js;">
var name = 'window下的name
';
var resultCon;
function fn1() {
resultCon.innerHTML += name;
}
function MyObj() {
var name = 'MyObj下的name
';
this.doFunction = function() {
resultCon.innerHTML += name;