1、this指向、闭包、全局/局部变量
js javascript">js-keyword">var w=js-number">100;
js-function">js-keyword">function js-title">f1js-params">(){
js-function">js-keyword">function js-title">f2js-params">(){ js-comment">//严格来说不算闭包,并没有调用局部变量;
document.write(js-keyword">this.w);
}
js-keyword">return f2;
}
f1()(); js-comment">//100 ,this指向问题:window调用f2所以this指向window,this.w查找全局中的w
js-comment">// ---------------分割线------------------
js-keyword">var w=js-number">100;
js-function">js-keyword">function js-title">f1js-params">(){
js-keyword">var w=js-number">101; js-comment">//此处的w为局部变量w
js-function">js-keyword">function js-title">f2js-params">(){
document.write(js-keyword">this.w);
}
js-keyword">return f2;
}
f1()(); js-comment">//100 ,this指向问题:window调用f2所以this指向window,this.w查找全局中的w,并没有涉及闭包中的f2调用f1的局部变量
js-comment">// ---------------分割线------------------
js-keyword">var w=js-number">100;
js-function">js-keyword">function js-title">f1js-params">(){
js-keyword">var w=js-number">101; js-comment">//此处的w为局部变量w
js-function">js-keyword">function js-title">f2js-params">(){
document.write(w);
}
js-keyword">return f2;
}
f1()(); js-comment">//101 ,闭包问题:闭包f2调用父函数f1中的局部变量w
js-comment">// ---------------分割线------------------
js-keyword">var w=js-number">100;
js-function">js-keyword">function js-title">f1js-params">(){
w=js-number">101; js-comment">//全局变量,当f1执行时,会给外部的全局变量w重新复制为101
js-function">js-keyword">function js-title">f2js-params">(){
document.write(js-keyword">this.w);
}
js-keyword">return f2;
}
f1()(); js-comment">//101 ,this指向问题:window调用f2所以this指向window,this.w查找全局中的w,而全局变量w被f1执行时重新复制为101
js-comment">// ---------------分割线------------------
js-keyword">var w=js-number">100;
js-function">js-keyword">function js-title">f1js-params">(){
js-keyword">this.w=js-number">102; js-comment">//f1执行时,window调用f1,this指向window,所以给全局变量w重新赋值
js-function">js-keyword">function js-title">f2js-params">(){
document.write(js-keyword">this.w);
}
js-keyword">return f2;
}
f1()(); js-comment">//102 ,this指向问题:window调用f2所以this指向window,this.w查找全局中的w