现在校招基本结束了,所以有时间总结一下这段时间遇到的问题。在众多的笔试题中,发现有很多是对JSDomaininspection的影响,所以查资料总结一下。众所周知,js不像其他的OOP语言。它是一种弱类型语言,在数据类型上没有明显的区别。还有一个区别就是它的作用域,造成这个区别主要是因为js的继承方式是通过原型链来实现的。a)js没有块级作用域,所谓块级作用域是指if,for,while(花括号括起来的部分)测试如下(Chrome浏览器)。下面是输出结果。从结果可以看出js没有块级作用域,也可以输出str1.b)js中只有函数作用域和全局作用域,下面分析函数作用域。下面是输出结果。从结果可以看出js是有函数作用域的,所以str2在fun1之外是undefined的。要理解js的范围,就必须要涉及到原型链的问题。下面对其进行简单分析.c)当在当前作用域中找不到指定的对象或变量时,js会通过原型链向上查找,即查找当前作用域的父作用域,如果是还是没找到,还是会往上找,直到找到,或者找根节点,直到找不到。下面是输出结果:从结果可以看出,在fun2中仍然可以输出str4,因为它的父作用域是全局作用域,在全局作用域中有一个str4变量。d)关于上面说到父作用域,还有一种情况,就是如果函数被调用,也就是函数嵌套时,父作用域引用了它。这样很容易让人迷惑,误以为会输出Eric,结果却不是这样,结果如下:从结果可以看出输出的是gaohui而不是Eric,父类此时的作用域指的是定义函数的作用域的父作用域,而不是调用函数的地方的父作用域Scope。这里只是简单分析一下面试过程中js的范围,更复杂的js原型链就不深入讲解了。如果想深入了解,可以参考这篇边博文http://www.cnblogs.com/wangfupeng1988/tag/%E5%8E%9F%E5%9E%8B%E9%93%BE/
