使用var关键字声明变量,会在所有所谓代码执行之前被声明,但是不会赋值。
解析器在调用函数时会像函数内部传递一个隐含参数–this this称为函数执行的上下文对象
以函数的方式调用时,this就是指window以方法的方式调用时,就是指的这个方法的对象例子:使用闭包实现三秒后打印出所有内容
// lis是获取的所有li标签 var lis = document。getElementsByTagName['li']; for(var i = 0;i < lis.length; i++){ // ()(); 立即执行函数 (function(i){ setTimeout(function(){ // 定时器里的i是立即执行函数的i,也形成了闭包 console.log(lis[i],innerHTML); },3000) })(i); }思考题 思考打印结果是什么,是否有闭包?
var name = "this window"; var object = { name: "my object"; getNameFunc: function(){ return function(){ return this.name; } } } console.log(object.getNameFunc()()); // this window ; 没有闭包 // 分析 var f = object.getNameFunc(); // 相当于 f = function(){ return this.name; } f(); // 就类似于function(){this}(); 这是立即执行函数,this指向是window //**********************************************************// var name = "this window"; var object = { name: "my object"; getNameFunc: function(){ var that = this; return function(){ return this.name; } } } console.log(object.getNameFunc()()); // my object; 存在闭包 // 分析 // 因为是object调用的getNameFunc,所以this指向onject,that就等于object,所以打印my object var f = object.getNameFunc(); // 相当于 f = function(){ return that.name; } f()