本文实例分析了JS作用域闭包、预解释和this关键字。分享给大家供大家参考,具体如下:
var number = 2; var obj = {number : 5, fn1 : ( function() { this.number *= 2; number=number*2; var number=3; return function() { this.number *= 2; number*=3; alert(number); } } )() }; var fn1 = obj.fn1; alert(number); fn1(); obj.fn1(); alert(window.number); alert(obj.number);
【解析】
1. fn1本身后面就有(),所以var fn1 = obj.fn1;时他已经被执行,但是里面的return function并没有被执行
2. alert(number);输出全局的number,本来是2,经过var fn1 = obj.fn1;后,相当于执行了
this.number *= 2; number=number*2; var number=3;
这三句话
注意:任何一个直接执行的匿名方法,他的this指向window
所以this.number *= 2;使得全局变量变成4,即输出4
而number=number*2;他是去看作用域块里的number,var number=3;作用域声明在先,但是没有赋值,所以number=number*2;这句话其实没用
3. 执行到fn1();就是执行fn1里面的return function,也就是这三句话
this.number *= 2; number*=3; alert(number);
这时候依然是个匿名方法,所以this.number *= 2;使得全局变量变为8,number*=3;去找作用域块里的number,外层定义number为3,所以alert(number);就是9,如果是alert(this.number);则指向全局变量,即输出8
4. obj.fn1();,依然执行fn1里面的return function,也就是这三句话
this.number *= 2; number*=3; alert(number);
但这时this指向obj,this.number *= 2;使得obj里的number变为10,number*=3;还是去找作用域块,由于上面变为9,所以这里就是27,alert(number);输出的是作用域块的number,即27,如果是alert(this.number);则指向obj的number,即输出10
5. alert(window.number);经过上面几轮,全局变量变为8(即执行obj.fn1();对全局变量无影响)
6. alert(obj.number);只有这句话obj.fn1();,改变了obj.number,所以输出10
(function(){ var a=10; fn(); function fn(){ var a=a+10; console.log(a); return a; } console.log(a); console.log(fn()+10); })();
fn函数里的a先被声明但是没有赋值,然后进行运算,他不会去找函数外面的同名变量,因为他已经在里面被声明了。一个不是数字的和数字进行运算,输出NaN
console.log(fn()+10);这句话要输出两个值:console.log(fn());和console.log(fn()+10);
结果:
NaN
10
NaN
NaN
如果题目改成
(function(){ var a=10; fn(); function fn(){ a=a+10; console.log(a); return a; } console.log(a); console.log(fn()+10); })();
结果:
20
20
30
40
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
更新动态
- 群星《妖神令 影视原声专辑》[320K/MP3][85.23MB]
- 逆水寒手游五子棋第二十三关怎么过 逆水寒手游残局攻略大全
- 逆水寒手游五子棋第二十二关怎么过 逆水寒手游残局攻略大全
- 欢乐钓鱼大师最稀有的鱼是什么 欢乐钓鱼大师最稀有的鱼攻略
- ABC唱片-《蔡琴.三十周年纪念版》6N纯银镀膜[WAV+CUE]
- ABC唱片-《汉斯.德斯辛克.心中布鲁斯》6N纯银镀膜[WAV+CUE]
- 群星《DJ·夜色魅影HQ》头版限量[低速原抓WAV+CUE]
- 《如龙》桐生声优被警察拦下盘问:你有犯罪记录吗?
- 游族2023年净利润0.91亿元 《少年西游记2》即将公测
- 曝快手北京游戏事业部全数被裁 项目测试数据未达标
- 李雨寰.2012-我可是天使【有凰音乐】【WAV+CUE】
- 刘美君.1991-听我细诉【BMG】【WAV+CUE】
- 群星.2016-滚石爱情故事3CD【滚石】【WAV+CUE】
- 欢乐钓鱼大师怎么解锁全地图 欢乐钓鱼大师全地图解锁方法
- 欢乐钓鱼大师锦标赛在哪里进 欢乐钓鱼大师锦标赛入口位置介绍