关于普通函数调用和全局变量的定义 - pod4g/tool GitHub Wiki
;(function(document, undefined) {
console.log("外层的自执行函数:"+this);// 1 window
document.addEventListener('DOMContentLoaded', function() {
console.log("DOM Ready:"+this); // 2 HTMLDocument
var test = function (){
var name = "liyanfeng";
function test2(){
console.log("test2:"+this); // 3 window
console.log("test2:"+name); // 4 liyanfeng
function test3(){
console.log("test3:"+this); // 5 window
function test4(){
console.log("test4:"+this); // 6 window
(function(){
console.log("test4内部的自执行函数(在其内定义了a变量,没用var):"+this); //7 window
a = '李彦峰';
})()
}
test4();
}
test3();
}
test2();
}
test();
}, false);
})(document);
window.onload = function(){
console.log("onload:"+a); // 8 李彦峰
}
打印结果及顺序如下
- 外层的自执行函数:[object Window]
- DOM Ready:[object HTMLDocument]
- test2:[object Window]
- test2:liyanfeng
- test3:[object Window]
- test4:[object Window]
- test4内部的自执行函数(在其内定义了a变量,没用var):[object Window]
- onload:李彦峰
结论如下:
- 普通的函数调用,包括自执行函数与函数表达式,内部的this都是window,不管嵌套多深都是这样
- 在函数内部定义变量只要是不加var,就一定在是全局变量,不管嵌套多深都是这样