JavaScript教程函数进阶,函数(下)作用域(强调)什么是作用域,即一个变量能生效的作用域变量不是处处可用,这个变量的使用作用域是全局作用域的作用域·全局范围是最大的范围。在全局范围内定义的变量可以在任何地方使用。当页面打开时,浏览器会自动为我们生成一个全局范围的窗口。这个作用域会一直存在,直到页面关闭时才会被销毁_//下面两个变量存在于全局作用域下,可以在任何地方使用_varnum=100varnum2=200局部作用域局部作用域在全局作用域下有打开了一个相对较小的范围。在局部作用域中定义的变量只能在局部作用域内使用。在JS中,只有函数可以生成局部作用域,除此之外别无他法。每一个函数,都是局部作用域_//这个num是全局作用域下的变量,可以在任何地方使用_varnum=100functionfn(){//后面的变量是fn局部作用域内的变量_//只能是fn函数内部使用_varnum2=200}fn()变量使用规则(强调)有了作用域后,变量就有了使用范围,也就有了使用规则。变量使用规则分为两种,访问规则和赋值规则。访问规则。当我想获取一个变量的值时,我们称这种行为为访问。使用如果不存在则到上层作用域中查找,如果存在则使用如果不存在则到上层作用域中查找,以此类推如果全局作用域中没有这个变量,那么一个会直接报错(变量未定义)varnum=100functionfn(){varnum2=200functionfun(){varnum3=300console.log(num3)//它存在于自己的作用域中,使用它来使用安慰。log(num2)//如果你的作用域中没有,就去上层,也就是在fn的作用域中查找,如果找到就使用console.log(num)//如果没有没有,到fn的上一层没有,再上一层到globalscope发现有,直接用console.log(a)//self自己没有的话,一层层往上找,全世界都找不到,就会报错}fun()}fn()·变量的访问规则也叫查找机制thescope·scope的查找机制只能向上查找,不能向下查找functionfn(){varnum=100}fn()console.log(num)//发现没有scope,我是在全局范围内,我没有更进一步的层级,所以直接报一个错误的赋值规则当你想给一个变量赋值的时候,你需要先找到这个变量,然后再给它赋值。变量赋值规则:先在自己的范围内查找,有则直接赋值。如果没有,则在上层范围内搜索。如果有,直接赋值。如果上层作用域没有查找,直接赋值。如果没有全局作用域,那么就把这个变量定义为全局变量赋值functionfn(){num=100}fn()//fn调用后,需要给num赋值//检查是否有是自己作用域内没有num变量//那么就往上层查找//上层是全局作用域,还是没有//然后将num定义为全局变量并赋值//所以fn()之后会有一个全局变量num,值为100_console.log(num)_//100
