标签:
##9.16上下文
执行上下文环境:1.变量,变量的声明 ,默认undefined
2.this:赋值,全局指向window
3.函数的声明:function f1(){};
函数表达式:var arr = function (){};
函数调用完成上下文出栈,并且函数里的变量被销毁,释放内存
函数中的变量:函数每被调用一次都会产生一个新的上下文环境,,不同的调用会产生不同的参数
函数中的变量:window , arguments ,undefined
自由变量:不再同一个作用域的变量,定义在一个作用域,调用在另一个作用域
当函数在于解析,已经确定了自由变量
全局变量可以用window访问
没有使用var创建代表全局变量:a = 1;
=== :代表全等
//全局变量可以用window访问
var a = 10;
function arr(){
var a = 20;
console.log(window.a);
}
arr();
//函数每一次调用,都会生成新的上下文,不同的调用会有不同的参数
var a = 10;
function arr(){
console.log(a);//a是自由变量:在一个作用域生成,在另一个作用域调用
//当函数定义时,已经确定了自由变量
}
function arrl(){
var a = 20;
arr();
}
arrl();//输出10
//先找到var和function,再找到arr()函数进入,找到var a; var a = 100;
var a = 10;//全局变量
function arr(){
//局部变量
a = 100;
console.log(a);//100
console.log(this.a);//10
var a;
console.log(a);//100
}
arr();
//arr调用完成,销毁.找到全局变量
console.log(a);//10
##作用域
作用域里并没有变量,作用域里的变量和函数都存放在上下文里。
作用域链:
先在当前作用域找,如果有则获取并结束,如果没有则继续向上找
如果当前作用域是全局作用域,如果没找到返回未定义。
每个函数都会创建自身的作用域,函数定义时已经确定
所有window对象的属性拥有全局作用域
所有末定义直接赋值的变量自动声明为拥有全局作用域(没有使用var创建代表全局变量:a = 1;)
##this
函数作为对象的一个属性,并且作为对象的一个属性被调用时,谁调用函数,函数中的this指向该对象
this在调用时才能确定是谁在调用,哪个调用就指向哪个
构造函数:this通过new的方式指向的是new出来的对象
普通函数:this指向的是window对象
构造函数:
//构造函数,this指向通过new产生的对象arrl
function arr(){
this.name = "zhangsan";
this.age = 20;
console.log(this);
}
var arrl = new arr();
普通函数:
//普通函数。this指向window对象
function arr(){
this.name = "zhangsan";
this.age = 20;
console.log(this);
}
arr();
//函数作为对象的一个属性,并且作为对象的一个属性被调用时,函数中的this指向该对象
//创建一个对象
var arr = {
age:10,
s:function(){
console.log(this.age);//对象的属性,this指向的是对象arr
}
};
arr.s();
//函数作为对象的一个属性,并且作为对象的一个属性被调用时,谁调用函数,函数中的this指向该对象
var arr = {
age:10,
s:function(){
console.log(this.age);
}
};
var arr2 = {
age:20
};
//对象调用属性的方法
//arr2调用.s函数,函数中的this指向该对象
arr2.s = arr.s;
arr2.s();//20
##call:
加入call:this指向的是传入的值
call是functiond的方法
标签:
原文地址:http://www.cnblogs.com/sgl520/p/4824688.html