读《单页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);//
otherOuter();//
}
function otherOuter(){
console.log(a);
};
outer();由于函数作用域是按照词法来划分的,所以作用域在定义函数时就确定了,因此,即使在outer内部调用otherOuter函数,otherOuter也不能访问outer内的变量。把定义移到outer函数里面,则不同:
var a=1;
function outer(){
var a=2;
console.log(a);//
function otherOuter(){
console.log(a);
};
otherOuter();//
} outer(); - 作用域链:当有嵌套环境时,变量的作用域就形成了作用域链,查找变量的定义时,js引擎会首先在当前执行环境查找,如果没有找到,则会沿着作用域链向上,直到找到该变量或者到达全局作用域(window或者global)为止。全局变量是作为全局对象的属性来保存的。定义全局变量a,会有a===window.a
读《单页web应用》-回顾作用域的更多相关文章
- 构建单页Web应用
摘自前端农民工的博客 让我们先来看几个网站: coding teambition cloud9 注意这几个网站的相同点,那就是在浏览器中,做了原先“应当”在客户端做的事情.它们的界面切换非常流畅,响应 ...
- Javascript 与 SPA单页Web富应用
书单推荐 # <单页Web应用:JavaScript从前端到后端> http://download.csdn.net/detail/epubitbook/8720475 # <MVC ...
- 构建单页Web应用——简单概述
一.开发框架 ExtJS可以称为第一代单页应用框架的典型,它封装了各种UI组件,用户主要使用JavaScript来完成整个前端部分,甚至包括布局.随着功能逐渐增加,ExtJS的体积也逐渐增大,即使用于 ...
- 单页web应用是什么?它又会给传统网站带来哪些好处?
文章来源:<单页Web应用:JavaScript从前端到后端> 什么是单页应用? 单页应用是指在浏览器中运行的应用,它们在使用期间不会重新加载页面.像所有的应用一样,它旨在帮助用户完成任务 ...
- 单页Web应用优缺点
一.定义单页 Web 应用 (single-page application 简称为 SPA) 是一种特殊的 Web 应用.它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HT ...
- 单页Web应用:
概念: Web应用程序: WEB应用程序一般是B(浏览器)/S(服务器)模式.Web应用程序首先是“应用程序”,和用标准的程序语言,如C.C++等编写出来的程序没有什么本质上的不同.然而Web应用程序 ...
- 单页web应用(SPA)的简单介绍
单页 Web 应用 (single-page application 简称为 SPA) 是一种特殊的 Web 应用.它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML.J ...
- 论单页Web应用和RESTful架构
单页Web应用 概述 单页Web应用并不是突然诞生的一门新技术,而是web展示的一种新的尝试.它将所有的动作局限于一个Web页面,在加载站点首页的时候就加载站点需要的JavaScript和CSS.单页 ...
- 简陋的 ASP.NET CORE 单页Web应用程序“框架”
我对ASP.NET CORE了解不多,不知道是不是重复造轮子,也或者什么也不是,这个Demo是这样的: 1.非常简单或者说原始:2.将单页Web应用增加了一个页(Page)概念(相当于MVC的 Vie ...
- 《单页Web应用--温故JavaScrpt》学习笔记整理
变量作用域,函数提升和执行环境对象 1. 变量作用域 在 JavaScript 中,变量 的 作用域 由 函数 限定,即:唯一能定义变量作用域的语块就是 函数. 变量 要么是全局的,要么是局部的. ...
随机推荐
- C#遐想/瞎想
泛型约束更强大.比如支持有参构造函数.枚举.委托: void Foo<T>() where T : new(string, int), enum, delegate 空值判断符允许对属性/ ...
- Mac OS X搭建C#开发环境
在Mac下想要用C#语言的话,首先得有个跨平台的.Net环境-Mono http://www.mono-project.com/ 有了Mono平台之后,还得有一个好工具:目前比较好的IDE是Xmari ...
- tornado+sqlalchemy+celery,数据库连接消耗在哪里
随着公司业务的发展,网站的日活数也逐渐增多,以前只需要考虑将所需要的功能实现就行了,当日活越来越大的时候,就需要考虑对服务器的资源使用消耗情况有一个清楚的认知. 最近老是发现数据库的连接数如果 ...
- 【转】gc日志分析工具
性能测试排查定位问题,分析调优过程中,会遇到要分析gc日志,人肉分析gc日志有时比较困难,相关图形化或命令行工具可以有效地帮助辅助分析. Gc日志参数 通过在tomcat启动脚本中添加相关参数生成gc ...
- C#使用ADO.NET访问数据库(一)
博主好久没更新博客了,最近有点忙(打麻将0.0..),今天更新一篇C#的,我还是想坚持更新博客,分享一下自己的心得,闲话少说,开始正题~~ ADO.NET概述:ADO.NET的作用在于他是客户端访问服 ...
- ubuntu 16 安装django nginx uWSGI
参考 https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-uwsgi-and- ...
- 学习Maven之Maven Clean Plugin
1.maven-clean-plugin是个什么鬼? maven-clean-plugin这个插件用maven的人都不陌生.我们在执行命令mvn clean时调用的就是这个插件. 这个插件的主要作用就 ...
- Java中一些常用的方法
1.计算程序运行时常 long start = System.currentTimeMillis(); … … … long end = System.currentTimeMillis(); Sys ...
- 在阿里云中编译Linux4.5.0内核 - Ubuntu内核编译教程
实验环境:Ubnuntu 64位(推荐使用14.04)+Xshell 阿里云现在提供的云服务器很好用的,用来编译内核性能也不错.本文介绍最基本的内核编译方法,为了方便,所有操作均在root用户下进行. ...
- javascript继承笔记
//原型(prototype):原型是一个对象,其他对象可以通过它实现属性继承 /*笔记: * 1.类式继承:通过原型链继承的方式 * 2.原型式继承:对类式继承的封装 * 3.寄生式继承:对原型继承 ...