首先我们得知道什么是作用域,什么是作用域链
作用域它是指对某一变量和方法具有访问权限的代码空间,在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)