1.1. this指向

523 阅读1分钟

1.this指向

this始终指向调用方法的对象。

  • 1.以函数的形式调用时,this永远指向window(浏览器)或global(nodejs)
  • 2.以方法的形式调用时,this就是调用方法的那个对象
  • 3.当以构造函数的形式调用时,this就是新创建的那个对象
  • 4.使用call()和apply()调用时,this是指定的那个对象
var name = 'global name';
var obj={
    name:'inner name',
    sayName:function(){
       console.log(this);
    }     
}
obj.sayName();   //obj
var sayName = obj.sayName;
sayName(); //window

2.嵌套函数

嵌套函数 this不会继承外层函数的this;
这里bar改为剪头函数即可继承外层;

var name = 'global name';
var obj={
    name:'inner name',
    sayName:function(){
       function bar(){
         console.log(this);
       }
       bar();   //window.bar()
    }     
}
obj.sayName();   //window

3.词法作用域

规定了我们的js程序按照特定方式去查找变量;
词法作用域又叫静态作用域,函数的作用域在函数定义的时候就规定。
这个规则其实粗俗的理解就是 就近原则

var value = 1;
function foo() {
  console.log(value);
}
function bar() {
  var value = 2;
  foo();
}
bar();  // 1 

参考 segmentfault.com/a/119000001…