您的位置:首页 > 其它

指尖的流连9月20.

2015-09-20 23:04 169 查看
##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的方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: