JS 函数的上下文

2016-03-04  本文已影响286人  a5c0a9d9ccb8

函数执行上下文,其实就是Javascript中代码的运行环境,可以通过this来访问函数的执行上下文。分为以下三种:

注: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 函数执行上下文

上一篇下一篇

猜你喜欢

热点阅读