现在校招也基本结束了,所以有时间把这段时间遇到的问题做个总结.在很多的笔试题目中,发现有很多对JS作用域方面的考察,所以查阅资料总结一下.

众所周知,js不像其他OOP语言那样,他是一种弱类型的语言,对数据类型没有很明显的区别.还有一点不同是它的作用域,引起这点不同主要是因为js的继承方式是通过原型链的方式来实现的.

a)js没有块级作用域,所谓块级作用域即if,for,while(花括号括起来的部分)语句里面的部分.测试如下(Chrome浏览器).

下面为输出结果

从结果可以看出,js不存在块级作用域,一样可以输出str1.

b)js里面只有函数作用域,以及全局作用域,下面分析函数作用域.

下面为输出结果

从结果可以看出js存在函数作用域,所以在fun1以外str2未定义.要想搞明白js的作用域就要牵扯到原型链的问题,下面对其简单分析.

c)当在当前作用域找不到指定对象或变量时,js会通过原型链向上寻找,即查找当前作用域的父级作用域,如若仍未找到,仍会向上寻找,直到找到,或找到根节点未找到为止.

下面为输出结果:

从结果可以看出,fun2中仍然可以输出str3,因为它的父级作用域为全局作用域,且全局作用域中存在str3变量.

d)关于上面说的父级作用域,还有一种情况,就是假如调用的是函数,即函数嵌套时,父级作用域的指代.

这点容易让人迷惑,误以为会输出Eric,但结果却不是这样的,结果如下:

从结果可以看出,输出的是gaohui而不是Eric,此时的父级作用域指的是函数定义地方作用域的父级作用域,而不是函数调用的地方的父级作用域,这也就说明函数的作用域确实是在定义这个函数的时候就确定了,而不是其执行的时候.


在此只是对面试过程中关于js的作用域方面的问题做了简单的分析,其中涉及到更为复杂的js原型链的问题没有深入说明,若想深究,搞明白,可参考这边博文http://www.cnblogs.com/wangfupeng1988/tag/%E5%8E%9F%E5%9E%8B%E9%93%BE/

面试过程中javascript原型链与作用域的问题的更多相关文章

  1. 图解JavaScript中的原型链

    转自:http://www.jianshu.com/p/a81692ad5b5d typeof obj 和 obj instanceof Type 在JavaScript中,我们经常用typeof o ...

  2. javascript原型链中 this 的指向

    为了弄清楚Javascript原型链中的this指向问题,我写了个代码来测试: var d = { d: 40 }; var a = { x: 10, calculate: function (z) ...

  3. javascript原型链继承

    一.关于javascript原型的基本概念: prototype属性:每个函数都一个prototype属性,这个属性指向函数的原型对象.原型对象主要用于共享实例中所包含的的属性和方法. constru ...

  4. JavaScript学习总结(十七)——Javascript原型链的原理

    一.JavaScript原型链 ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法.其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法.在JavaScript中, ...

  5. JavaScript原型链及继承

    在JavaScript中,所有的东西都是对象,但是JavaScript中的面向对象并不是面向类,而是面向原型的,这是与C++.Java等面向对象语言的区别,比较容易混淆,因此把我自己学习的过程记录下来 ...

  6. 理解js中的原型链

    对象有”prototype”属性,函数对象有”prototype”属性,原型对象有”constructor”属性. 关于原型 在JavaScript中,原型也是一个对象,通过原型可以实现对象的属性继承 ...

  7. JavaScript原型链及其污染

    JavaScript原型链及其污染 一.什么是原型链? 1.JavaScript中,我们如果要define一个类,需要以define"构造函数"的方式来define: functi ...

  8. 明白JavaScript原型链和JavaScrip继承

    原型链是JavaScript的基础性内容之一.其本质是JavaScript内部的设计逻辑. 首先看一组代码: <script type="text/javascript"&g ...

  9. 资料--JavaScript原型链

    JavaScript原型链 原文出处:https://www.cnblogs.com/chengzp/p/prototype.html 目录 创建对象有几种方法 原型.构造函数.实例.原型链 inst ...

随机推荐

  1. Java核心技术II读书笔记(一)

    Char2 XML 解析器:读入一个文件,确认其具有正确的格式,然后将其分解成各种元素,使程序员能够访问这些元素. java库提供了两种XML解析器:DOM和SAX,即文档对象模型和流机制解析器. D ...

  2. mysql innodb锁简析(2)

    继续昨天的innodb锁的分析: 注:此博文参考一下地址,那里讲的也很详细.http://xm-king.iteye.com/blog/770721 mysql事务的隔离级别分为四种,隔离级别越高,数 ...

  3. 编码的UI测试项目——Visual Studio 2013

    今天实现了一次编码的UI测试项目,以下是我进行测试的过程: 1.新建测试项目 在visual studio中(我用的版本是2013 update2)点击文件->新建->项目,选择“编码的U ...

  4. LR之性能分析基础

    1.判断测试结果有效性 2.分析要点提示 3.Analysis主要提供的6大类分析图 4.分析流程

  5. c++中获取字符cin,getchar,get,getline的区别

    http://www.imeee.cn/News/GouWu/20090801/221298.html cin.get()与getchar()函数有什么区别? 详细点..C++中几个输入函数的用法和区 ...

  6. WS之cxf处理的复杂类型(Map)

    一.服务端: 1.创建接口: package cn.tdtk.ws.dao; import java.util.List;import java.util.Map; import javax.jws. ...

  7. jsp界面项目绝对路径问题

    方法一:直接采用绝对路径 (不推荐) 在JSP页面端,获得本项目的绝对地址(如果你的项目叫MyApp,那么获得到的地址就是 http://localhost:8080/MyApp/): 代码如下: & ...

  8. ios自定义View自动布局时计算大小

    https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/Impleme ...

  9. pku3277 City Horizon

    http://poj.org/problem?id=3277 线段树,离散化,成段更新 #include <stdio.h> #include <stdlib.h> #defi ...

  10. Visual Studio Profiler 跟踪检查每个exe dll 性能 执行时间 CPU占用情况的方法