JS 函数的上下文
函数执行上下文,其实就是Javascript中代码的运行环境,可以通过this来访问函数的执行上下文。分为以下三种:
- 全局级别的代码
这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境。默认为window。 - 函数级别的代码
当执行一个函数时,运行函数体中的代码。 - Eval的代码
在Eval函数内运行的代码。
注:call和apply通常用来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数
例子1
<pre>
var seq = [1,2,3,4];
for(var i in seq){
var name = ‘zhou’ + i;
window.setTimeout(function(){
$('p’).apend(name);
},i*1000);
}
</pre>
有人可能认为输出是zhou1zhou2zhou3zhou4,实际上结果是zhou1zhou2zhou3zhou4。因为函数window.setTimeout(实际上我们常常会省略掉window)的上下文实际上是window,而函数体中的name实际上就是window.name。他的值就是最后一次循环后的值zhou4。<br />
例子2
<pre>
var seq = [1,2,3,4];
for(var i in seq){
var name = ‘zhou’ + i;
var obj = {};
obj.name = name;
obj.setTimeout = function(){
var local = this; // 该方法是对象obj的属性方法,所以this就是obj
window.setTimeout(function(){
$('p’).apend(local.name); // 此处千万不可以用this,因为此处的this实际上是window。
},i*1000)
}
}</pre>
参考链接
深入理解Javascript之执行上下文(Execution Context)
javascript 函数执行上下文