首先我们得知道什么是作用域,什么是作用域链
作用域它是指对某一变量和方法具有访问权限的代码空间,在js中,作用域是在函数中维护。表示变量或函数起作用的区域,指代了他们在什么杨的上下文中执行,亦即上下文执行环境。JavaScript中的作用域只有两种:全局作用域和本地作用域,本地作用于是按照函数来区分的。
说了那么多其实作用域就是浏览器给js的一个生存环境
那再了解下什么是作用域链:
js中的关键字var和function都可以提前声明和定义,提前声明和定义的放在我们的内存地址(对内存)中。然后js从上到下逐行执行,遇到变量就去内存地址查找是否存在这个变量。有就使用,没有就继续向父级 作用域查找直到window下结束,这种查找机制叫作用域链。
我们要知道js代码中存在者大量的变量和函数,我们再使用他们的时候一定要知道他们归属谁
以下是我整理的几道作用域题,可以看一下:
1、
var a=123;
function fun(){
alert(a)
}
fun()
2、
var a=123;
function fun(){
alert(a);
a=456;
}
fun()
alert() //
3、
var a=123;
function fun(){
alert(a);
a=456;
}
fun()
alert(a)
4、
var a=123;
function fun(a){
alert(a);
a=456;
}
fun();
alert(a)
5、
var a=123;
function fun(a){
alert(a);
a=456;
}
fun(123)
alert(a)
6、
var a=12;
function fn(){
console . log(a)
var a=45;
console . log(a)
}
fn()
7、
var a=12;
function fn(){
console . log(a)
a=45;
console . log(a)
}
fn()
8、
function fn(){
console . log(11)
function ff(){
console . log(22)
}
ff()
}
fn()
9、
var a=12;
function fn(){
console . log(a)
return 4;
var a=45;
}
fn()
10、
var a=45;
function fn(a){
console . log(a)
}
fn()
11、
console . log(total);
var total=0;
function fn(num1,num2){
console . log(total);
var total=num1+num2;
console . log(total)
}
fn(100,200)
console . log(total)
12、
console . log(to)
var to=1;
function fn(n1,n2){
console . log(to)
to=n1+n2;
console . log(to)
}
fn(10,20)
console . log(to)
13、
function fn(a){
console . log(a)
var a=123;
console . log(a)
function a(){ }
console . log(a)
var b=function(){ }
console . log(b)
function b(){ }
}
fn(1)
注:如果我们声明得变量和函数同名了,在预解释得时候只声明一次
14、
function test(a,b){
console . log(b)
console . log(a)
c=0;
a=3;
b=2;
console . log(b);
function b(){ }
function d(){ }
console . log(b)
}
test(1)
15、
function test(a,b){
console . log(a)
console . log(b)
var b=234;
console . log(b)
a=123;
console . log(a)
function a(){ }
var a;
b=234;
var b=function (){ }
console . log(a);
console . log(b)
}
test(1)