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