1. js中没有块级作用域,只有全局作用域函数作用域。(es5以下)全局变量可以在任何地方访问,局部变量只能在声明它的地方访问。

    var a=1;
    function func(){
    var a=2;
    }
    console.log(a);//1
    

  2. 在函数中声明变量时,省略var后会声明全局变量。
    function func(){
    a=1;
    }
    console.log(a)//输出1
    

  3. 在js中,当变量被声明时,声明会被提升到它所在函数的顶部。
    function func(){
    console.log(a);//undefined
    var a=1;
    }function _func(){
    var a;
    console.log(a);//undefined
    a=1;
    }
    

    上面var a=1;相当于做了两件事,声明 a变量和为变量a赋值1;

    所以,上面的例子中的func函数等效于_func函数。
    这里要注意的是:声明了变量后没有赋值,值是undifined,而如果没有声明这个变量则会报错X。

  4. 在函数被调用时,js引擎会对函数代码进行两轮处理。第一轮引擎分析代码并做了三件事:
    • 声明+初始化函数参数
    • 声明局部变量
    • 声明并初始化函数
  5. 执行环境和执行环境对象
    执行环境是指函数的执行,由函数执行时发生的所有事物组成。
    执行环境对象是一个对象{},用于保存执行环境部分的变量和函数。
    每次调用函数都会创建一个执行环境对象。
    执行环境对象不能直接访问。
    下面是执行outer(1)的过程js引擎在第一轮中每一步 执行环境对象所发生的变化,可以看出,第一轮中并不执行内部函数和为局部变量赋值。

    outer(1);//执行环境对象:{}
    function outer(arg){//执行环境对象:{arg:1}
    var local_var='foo';//执行环境对象:{arg:1,local_var:undefined}
    function inner(){//执行环境对象:{arg:1,local_var:undefined,inner:function(){...}}
    console.log('inner');
    }
    inner();//js引擎第一轮不会执行inner()代码
    }

    在执行环境中调用在该执行环境中定义的内部函数,会在当前执行环境中创建一个新的执行环境。例子:

    var a=1;
    function outer(){var a=2;console.log(a);//2otherOuter();//1
    }
    function otherOuter(){console.log(a);
    };
    outer();

    由于函数作用域是按照词法来划分的,所以作用域在定义函数时就确定了,因此,即使在outer内部调用otherOuter函数,otherOuter也不能访问outer内的变量。把定义移到outer函数里面,则不同:

    var a=1;
    function outer(){var a=2;console.log(a);//2function otherOuter(){console.log(a);
    };otherOuter();//2
    }outer();

  6. 作用域链:当有嵌套环境时,变量的作用域就形成了作用域链,查找变量的定义时,js引擎会首先在当前执行环境查找,如果没有找到,则会沿着作用域链向上,直到找到该变量或者到达全局作用域(window或者global)为止。全局变量是作为全局对象的属性来保存的。定义全局变量a,会有a===window.a

转载于:https://www.cnblogs.com/imgss/p/6036204.html

读《单页web应用》-回顾作用域相关推荐

  1. java 单页面spa_Javascript 与 SPA单页Web富应用

    书单推荐 # <单页Web应用:JavaScript从前端到后端>http://download.csdn.net/detail/epubitbook/8720475 # <MVC的 ...

  2. 《单页Web应用:JavaScript从前端到后端》——1.4 小结

    本节书摘来自异步社区<单页Web应用:JavaScript从前端到后端>一书中的第1章,第1.4节,作者:[美]Michael S. Mikowski , Josh C. Powell著, ...

  3. 单页web应用是什么?它又会给传统网站带来哪些好处?

    原文链接:http://blog.csdn.net/zuoninger/article/details/38842823 点击阅读原文 -------------------------------- ...

  4. SPA 单页Web应用

    定义 单页 Web 应用 (single-page application 简称为 SPA) 是一种特殊的 Web 应用.它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTM ...

  5. spa:单页web应用(介绍,实现思路及技术点,路由,router-link相关属性)

    SPA是什么 单页Web应用(single page application,SPA),就是只有一个Web页面的应用, 是加载单个HTML页面,并在用户与应用程序交互时动态更新该页面的Web应用程序 ...

  6. 单页Web应用 5 构建Model

    设计和构建Model的people对象.Model向Shell和功能模块提供业务逻辑和数据.Model不依赖用户界面,它被分离出来负责逻辑和数据管理.Model自身通过使用Data模块,从Web服务器 ...

  7. 单页web开发,学习CSS行内样式

    面试知识点 主要内容包括html,css,前端基础,前端核心,前端进阶,移动端开发,计算机基础,算法与数据结构,设计模式,项目等等. html 1.浏览器页面有哪三层构成,分别是什么,作用是什么? 2 ...

  8. [学习笔记] Cordova+AmazeUI+React 做个通讯录 - 单页应用 (With Router)

    [学习笔记] Cordova+AmazeUI+React 做个通讯录 系列文章 目录 准备 联系人列表(1) 联系人列表(2) 联系人详情 单页应用 (With Router) 使用 SQLite 传 ...

  9. 单页面 Web 应用(Single Page Application,SPA)的工作原理介绍

    原文地址 SPA 无处不在,但在网络开发人员中仍然是一个颇有争议的话题. 自 2003 年左右首次出现以来,单页 Web 应用程序已经取得了长足的进步.它们已成为现代 javascript 领域不可或 ...

  10. SPA (单页应用程序)

    单页Web应用 编辑 单页Web应用(single page web application,SPA),就是只有一张Web页面的应用.单页应用程序 (SPA) 是加载单个HTML 页面并在用户与应用程 ...

最新文章

  1. 离职10天,面挂4家公司!
  2. Java Swing中的聊天气泡
  3. c语言 消除最后一个空格,新人提问:如何将输出时每行最后一个空格删除
  4. 容器云平台在传统企业落地的一些思考和探索
  5. java中switch条件_关于java:你能在Android的switch-case中使用条件语句吗?
  6. OpenCV中将RGB数组在内存中压缩成JPEG文件
  7. 浅谈C#深拷贝,浅拷贝
  8. Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见...
  9. 流量计算机组成keypad,曾经的我
  10. php导出excel 繁体,php导出excel并解决乱码问题的方法介绍
  11. 逆向之汇编(堆栈平衡函数)
  12. 冰点还原精灵、影子系统区别哪个好
  13. mysql mpm_部署zabbix监控mysql (三) MPM插件介绍和部署
  14. 倾斜摄影在高速道路勘测中的应用-案例
  15. 【Codex】Evaluating Large Language Models Trained on Code
  16. 蓝牙音乐和导航语音播放混音卡顿问题
  17. 计算机视频剪辑教程,VLOG视频剪辑教程
  18. Postgresql杂谈 04—Postgresql中的五种常规索引
  19. 精读加密媒体扩展(Encrypted Media Extensions,EME)
  20. 使用Arduino开发板进行语音识别

热门文章

  1. 冲突等价(ConflictEquivalence) 可串行化调度(Serializable Schedules)
  2. mac IDEA java 如何进入到方法跳转 快捷键
  3. Linux常用监控服务器性能命令 内存 CPU 磁盘
  4. thinkphp去重,distinct、group
  5. css之限制文本行数,超出部分显示 “...“
  6. consul服务发现与注册于配置 (mac版为例)
  7. 升级Linux(Ubtun/CentOS)的OpenSSL(openssl-1.0.1h.tar.gz)
  8. 给Ubuntu 13.04换源 软件源、更新源
  9. java socket php_Web架构(二)PHP Socket与Java ServerSocket交互
  10. 阶段3 2.Spring_09.JdbcTemplate的基本使用_5 JdbcTemplate在spring的ioc中使用