读《单页web应用》-回顾作用域
- js中没有块级作用域,只有全局作用域和函数作用域。(es5以下)全局变量可以在任何地方访问,局部变量只能在声明它的地方访问。
var a=1; function func(){ var a=2; } console.log(a);//1
- 在函数中声明变量时,省略var后会声明全局变量。
function func(){ a=1; } console.log(a)//输出1
- 在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。 - 在函数被调用时,js引擎会对函数代码进行两轮处理。第一轮引擎分析代码并做了三件事:
- 声明+初始化函数参数
- 声明局部变量
- 声明并初始化函数
- 执行环境和执行环境对象
执行环境是指函数的执行,由函数执行时发生的所有事物组成。
执行环境对象是一个对象{},用于保存执行环境部分的变量和函数。
每次调用函数都会创建一个执行环境对象。
执行环境对象不能直接访问。
下面是执行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();
- 作用域链:当有嵌套环境时,变量的作用域就形成了作用域链,查找变量的定义时,js引擎会首先在当前执行环境查找,如果没有找到,则会沿着作用域链向上,直到找到该变量或者到达全局作用域(window或者global)为止。全局变量是作为全局对象的属性来保存的。定义全局变量a,会有a===window.a
转载于:https://www.cnblogs.com/imgss/p/6036204.html
读《单页web应用》-回顾作用域相关推荐
- java 单页面spa_Javascript 与 SPA单页Web富应用
书单推荐 # <单页Web应用:JavaScript从前端到后端>http://download.csdn.net/detail/epubitbook/8720475 # <MVC的 ...
- 《单页Web应用:JavaScript从前端到后端》——1.4 小结
本节书摘来自异步社区<单页Web应用:JavaScript从前端到后端>一书中的第1章,第1.4节,作者:[美]Michael S. Mikowski , Josh C. Powell著, ...
- 单页web应用是什么?它又会给传统网站带来哪些好处?
原文链接:http://blog.csdn.net/zuoninger/article/details/38842823 点击阅读原文 -------------------------------- ...
- SPA 单页Web应用
定义 单页 Web 应用 (single-page application 简称为 SPA) 是一种特殊的 Web 应用.它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTM ...
- spa:单页web应用(介绍,实现思路及技术点,路由,router-link相关属性)
SPA是什么 单页Web应用(single page application,SPA),就是只有一个Web页面的应用, 是加载单个HTML页面,并在用户与应用程序交互时动态更新该页面的Web应用程序 ...
- 单页Web应用 5 构建Model
设计和构建Model的people对象.Model向Shell和功能模块提供业务逻辑和数据.Model不依赖用户界面,它被分离出来负责逻辑和数据管理.Model自身通过使用Data模块,从Web服务器 ...
- 单页web开发,学习CSS行内样式
面试知识点 主要内容包括html,css,前端基础,前端核心,前端进阶,移动端开发,计算机基础,算法与数据结构,设计模式,项目等等. html 1.浏览器页面有哪三层构成,分别是什么,作用是什么? 2 ...
- [学习笔记] Cordova+AmazeUI+React 做个通讯录 - 单页应用 (With Router)
[学习笔记] Cordova+AmazeUI+React 做个通讯录 系列文章 目录 准备 联系人列表(1) 联系人列表(2) 联系人详情 单页应用 (With Router) 使用 SQLite 传 ...
- 单页面 Web 应用(Single Page Application,SPA)的工作原理介绍
原文地址 SPA 无处不在,但在网络开发人员中仍然是一个颇有争议的话题. 自 2003 年左右首次出现以来,单页 Web 应用程序已经取得了长足的进步.它们已成为现代 javascript 领域不可或 ...
- SPA (单页应用程序)
单页Web应用 编辑 单页Web应用(single page web application,SPA),就是只有一张Web页面的应用.单页应用程序 (SPA) 是加载单个HTML 页面并在用户与应用程 ...
最新文章
- 离职10天,面挂4家公司!
- Java Swing中的聊天气泡
- c语言 消除最后一个空格,新人提问:如何将输出时每行最后一个空格删除
- 容器云平台在传统企业落地的一些思考和探索
- java中switch条件_关于java:你能在Android的switch-case中使用条件语句吗?
- OpenCV中将RGB数组在内存中压缩成JPEG文件
- 浅谈C#深拷贝,浅拷贝
- Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见...
- 流量计算机组成keypad,曾经的我
- php导出excel 繁体,php导出excel并解决乱码问题的方法介绍
- 逆向之汇编(堆栈平衡函数)
- 冰点还原精灵、影子系统区别哪个好
- mysql mpm_部署zabbix监控mysql (三) MPM插件介绍和部署
- 倾斜摄影在高速道路勘测中的应用-案例
- 【Codex】Evaluating Large Language Models Trained on Code
- 蓝牙音乐和导航语音播放混音卡顿问题
- 计算机视频剪辑教程,VLOG视频剪辑教程
- Postgresql杂谈 04—Postgresql中的五种常规索引
- 精读加密媒体扩展(Encrypted Media Extensions,EME)
- 使用Arduino开发板进行语音识别
热门文章
- 冲突等价(ConflictEquivalence) 可串行化调度(Serializable Schedules)
- mac IDEA java 如何进入到方法跳转 快捷键
- Linux常用监控服务器性能命令 内存 CPU 磁盘
- thinkphp去重,distinct、group
- css之限制文本行数,超出部分显示 “...“
- consul服务发现与注册于配置 (mac版为例)
- 升级Linux(Ubtun/CentOS)的OpenSSL(openssl-1.0.1h.tar.gz)
- 给Ubuntu 13.04换源 软件源、更新源
- java socket php_Web架构(二)PHP Socket与Java ServerSocket交互
- 阶段3 2.Spring_09.JdbcTemplate的基本使用_5 JdbcTemplate在spring的ioc中使用