JS学习之this关键字
2015-08-12 08:40
330 查看
his关键字跟在哪定义没关系,跟在哪执行也没关,this的查找只遵循以下三点
1)自执行函数中的this永远是window
2)给元素的事件绑定方法,当触发事件执行对应方法的时候,方法中的this是当前元素
3)不管函数在哪里面执行,我们就看函数名之前是否有“·”,有的话,前面是谁就是谁,没有就是window
对上面的代码进行分析,运行之前,先预解释了一个number和一个obj,
当执行当自执行函数那里 时,obj中的fn1属性,对应的属性值是那个自执行函数的返回函数,由于,返回函数被占用了,所以这个自执行这次,产生的作用域不会被释放掉。
又由于自运行的函数只要没有·都是在window下运行的this就是window,故其执行时分析如上注释
1)自执行函数中的this永远是window
2)给元素的事件绑定方法,当触发事件执行对应方法的时候,方法中的this是当前元素
3)不管函数在哪里面执行,我们就看函数名之前是否有“·”,有的话,前面是谁就是谁,没有就是window
// var obj={fn1:fn}; // obj.fn1();//前面有.即为.前的obj // 函数在定义的时候 ,this指的是谁 是不知道的 // 变量属于哪个作用域,由他在哪儿(作用域)定义有关系 //自运行的函数都是在window下运行的this就是window
var number = 2; var obj = { number: 4, fn1: (function () { //自执行时,先声明了一个函数和一个number this.number *= 2;//执行时this.number是全局变量number,即window.number=4 number = number * 2;//这个number为undefined,是这个自执行函数作用域内的number var number = 3;//这个作用域内的number被从新定义为数字3 return function () { //返回给fn1 this.number *= 2;//在没执行之前,这个this无法确定 number *= 3;//这个number即为自执行函数内定义的number并不是全局变量 alert(number) //弹出的number也是自执行函数内定义的number } })(), db2: function () { this.number *= 2 } }; var fn1 = obj.fn1; alert(number);//弹出的为全局变量number 为4 fn1();//这里面的this即为window 弹出9 obj.fn1();//这里面的this即为obj 弹出27 alert(window.number);//弹出8 alert(obj.number);//弹出8
对上面的代码进行分析,运行之前,先预解释了一个number和一个obj,
当执行当自执行函数那里 时,obj中的fn1属性,对应的属性值是那个自执行函数的返回函数,由于,返回函数被占用了,所以这个自执行这次,产生的作用域不会被释放掉。
又由于自运行的函数只要没有·都是在window下运行的this就是window,故其执行时分析如上注释
相关文章推荐
- 关于JS中的JSON
- Jsoncpp的使用
- ExtJS 的一些使用总结(适用于3.x版本)
- 【JSTL EL】 jsp 页面学习
- javascript实现简单的分页特效
- js实现将选中值累加到文本框的方法
- JavaScript入门基础
- JavaScript检测并限制复选框选中个数的方法
- JavaScript实现点击单选按钮改变输入框中文本域内容的方法
- JavaScript实现同一页面内两个表单互相传值的方法
- javascript实现在下拉列表中显示多级树形菜单的方法
- JavaScript多线程详解
- javascript实现点击单选按钮链接转向对应网址的方法
- JavaScript实现动态删除列表框值的方法
- javascript表单验证大全
- 深入解读JavaScript中的Hoisting机制
- 详细解读JavaScript的跨浏览器事件处理
- JavaScript中的call方法和apply方法使用对比
- 简单方法实现json数据可视化
- js 转义特殊字符到 html