作用域和 this

来源:互联网 发布:大疆无人机 知乎 编辑:程序博客网 时间:2024/04/25 20:56
var a = 10;function test(){    a = 100;    console.log(a);    console.log(this.a);    var a;    console.log(a);}test();
var a = 100;function test(){    console.log(a);    var a = 10;    console.log(a);}test();
var a = 100;function test(){    console.log(a);    a = 10;    console.log(a);}test();console.log(a);

在非严格环境下,以上三个代码分别输出什么?碰到这种题目我也是头晕眼花,稍有不慎就掉坑了。当然实际业务中不会出现这样的代码,但还是相当有必要以这样的代码来检查对 JavaScript 理解的程度。
this 的用法参照阮一峰老师的博客,主要分为三种情况,但总的原则是指向调用函数的那个对象。

  • 全局环境:调用函数的对象实际为 window ,所以函数内的 this 指向 window ;

  • 构造函数:通过构造函造函数生成了一个新对象,this 指向这个新对象。

  • 对象的方法:函数作为对象的某个方法调用, this 就指向这个上级对象。

故第一道题中属于全局环境, this 指向 window ,所以输出结果为:100,10,100;
第二道题输出结果为:undefined,10;第三道题输出结果为:100,10,10;

0 0
原创粉丝点击