JS作用域闭包、预解释和this关键字综合实例解析
本文实例分析了JS作用域闭包、预解释和this关键字。分享给大家供大家参考,具体如下
var number = 2; var obj = {number : 5, fn1 : ( function() { this.number = 2; number=number2; 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=number2; var number=3;
这三句话
注意任何一个直接执行的匿名方法,他的this指向window
所以this.number = 2;使得全局变量变成4,即输出4
而number=number2;他是去看作用域块里的number,var number=3;作用域声明在先,没有赋值,所以number=number2;这句话其实没用
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程序设计有所帮助。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程