40.0JavaScript作用域
作用域:
- 作用域指一个变量的作用范围
- JS中一共两种作用域
1.全局作用域
2.函数作用域(局部作用域)
1.全局作用域
- 直接写在script标签的JS代码,都在全局作用域
- 全局作用域在页面打开的时候创建,在页面关闭时销毁
- 在全局作用域中有一个对象window,它代表一个浏览器的窗口,
它由浏览器创建,我们可以直接使用
- 在全局作用域中:
创建的变量都会作为window对象的属性保存
全局中的函数都会作为window对象的方法保存
- 全局作用域中的变量都是全局变量
在页面的任意的部分都可以访问到
2.函数作用域
- 调用函数时创建函数作用域,函数执行完毕以后,作用域销毁
- 每调用一次函数就会创建一个新的函数作用域,他们之间是相互独立的
- 在函数作用域中可以访问全局变量,
但在全局作用域中无法访问到局部变量
- 当在函数作用域操作一个变量时,它会先在自身作用域中寻找,如果有就直接使用,如果没有就向上一作用域中寻找,直到找到全局作用域,如果全局作用域中仍然没有找到,则会报错ReferenceError
- 在函数中想要访问全局变量可以使用window对象
var num=20;
function fun(){
var a=12;
console.log(a);
console.log("函数体内访问num="+num);
}
fun();作为函数调用
window.fun();作为对象.函数名() 把fun叫做是windwo对象的方法
console.log("num="+num);
console.log(a);
console.log(typeof window);
console.log(window);
局部作用域 函数作用域
var a="这是全局作用域中的变量a";
function fun2(){
var a="这是fun2中的变量a";
console.log(a);
function fun3(){
console.log(a);
console.log(window.a);
}
fun3()
}
fun2();
console.log(a);
41.0 JavaScript this
解析器在调用函数每次都会向函数内部传递一个隐含的参数
这个隐含的参数就是this,this指向的是一个对象,
这个对象我们称为函数执行的上下文对象,
根据函数调用方式不同,this会指向不同的对象
总结this:
1.以函数的形式调用时,this永远都是window
2.以方法的形式调用是,this就是调用方法的那个对象
function fun(a,b){形参
console.log("a="+a+", b="+b);
console.log(this);
}
fun(12,34);实参
function sayHello(){
console.log(this);
}
sayHello();
var obj={
name:"zhangsan",
sayWord:sayHello
};
obj.sayWord();函数以方法的形式被调用时,this指向的是调用方法的对象
var name="全部作用域中的变量name";
function fun(){console.log(this.name);}
var obja={ name:"zhangsan", sayWord:fun };{