HTML5学堂:两道经典的作用域习题,测测自己是不是掌握了作用域的知识吧~!在这道面试题中,主要涉及了JavaScript的编译期与执行期,应当清楚编译期JS做了什么操作,执行期又做了什么操作。知识方面,也要求对全局作用域、局部作用域的概念有所了解,并且能够明确局部作用域与全局作用域之间的访问特点。
作用域
JS的编译期与执行期,全局作用域、局部作用域
全局不能访问到局部作用域中的空间
本题目,在全局作用域下创建了一个a变量。在h5course函数下创建了一个a变量。在全局当中是不能够访问到局部中的内容,但是局部当中是能够访问到全局变量,如果局部作用域中出现变量,如果局部作用域中开辟了的变量存储空间,则不再向外层进行查找,如果在局部作用域中无法找到开辟的变量存储空间,则向外层进行查找。以此类推,直到寻找到最外层(window)为止
本题答案:共弹出两次,第一次弹出的是10,第二次弹出的是20(在全局和局部共开辟了两块空间,存储两个变量a的值,在全局调用的是全局变量a,而在局部,调用的是h5course函数这个局部作用域中的变量a)
欢迎沟通交流~HTML5学堂
作用域
JS的编译期与执行期,全局作用域、局部作用域
JS先编译后执行
本题目,在全局作用域下创建了一个a变量。在h5course函数下创建了一个a变量。在全局当中是不能够访问到局部中的内容,但是局部当中是能够访问到全局变量,如果局部作用域中出现变量,如果局部作用域中开辟了的变量存储空间,则不再向外层进行查找,如果在局部作用域中无法找到开辟的变量存储空间,则向外层进行查找。以此类推,直到寻找到最外层(window)为止。
与前面一题不同的是,函数中的alert语句调用了a变量,这个语句出现在var a(声明变量)之前。在JS编译期当中,进行了seta函数中变量a空间的开辟,但是此时并没有放置任何的值在其中。然后就执行了alert语句,此时,局部作用域有空间,所以并不会往父级查找,取到的是函数中变量的空间,但是因为JS的运行自上而下,并没有将20赋值给a。因此会弹出undefined
本题答案:共弹出两次,第一次弹出的是undefined,第二次弹出的是10(在全局和局部共开辟了两块空间,存储两个变量a的值,在全局调用的是全局变量a,而在局部,调用的是h5course函数这个局部作用域中的变量a)
欢迎沟通交流~HTML5学堂