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

读《单页web应用》-回顾作用域的更多相关文章

  1. 构建单页Web应用

    摘自前端农民工的博客 让我们先来看几个网站: coding teambition cloud9 注意这几个网站的相同点,那就是在浏览器中,做了原先“应当”在客户端做的事情.它们的界面切换非常流畅,响应 ...

  2. Javascript 与 SPA单页Web富应用

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

  3. 构建单页Web应用——简单概述

    一.开发框架 ExtJS可以称为第一代单页应用框架的典型,它封装了各种UI组件,用户主要使用JavaScript来完成整个前端部分,甚至包括布局.随着功能逐渐增加,ExtJS的体积也逐渐增大,即使用于 ...

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

    文章来源:<单页Web应用:JavaScript从前端到后端> 什么是单页应用? 单页应用是指在浏览器中运行的应用,它们在使用期间不会重新加载页面.像所有的应用一样,它旨在帮助用户完成任务 ...

  5. 单页Web应用优缺点

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

  6. 单页Web应用:

    概念: Web应用程序: WEB应用程序一般是B(浏览器)/S(服务器)模式.Web应用程序首先是“应用程序”,和用标准的程序语言,如C.C++等编写出来的程序没有什么本质上的不同.然而Web应用程序 ...

  7. 单页web应用(SPA)的简单介绍

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

  8. 论单页Web应用和RESTful架构

    单页Web应用 概述 单页Web应用并不是突然诞生的一门新技术,而是web展示的一种新的尝试.它将所有的动作局限于一个Web页面,在加载站点首页的时候就加载站点需要的JavaScript和CSS.单页 ...

  9. 简陋的 ASP.NET CORE 单页Web应用程序“框架”

    我对ASP.NET CORE了解不多,不知道是不是重复造轮子,也或者什么也不是,这个Demo是这样的: 1.非常简单或者说原始:2.将单页Web应用增加了一个页(Page)概念(相当于MVC的 Vie ...

  10. 《单页Web应用--温故JavaScrpt》学习笔记整理

     变量作用域,函数提升和执行环境对象 1. 变量作用域 在 JavaScript 中,变量 的 作用域 由 函数 限定,即:唯一能定义变量作用域的语块就是 函数. 变量 要么是全局的,要么是局部的. ...

随机推荐

  1. bzoj2693--莫比乌斯反演+积性函数线性筛

    推导: 设d=gcd(i,j) 利用莫比乌斯函数的性质 令sum(x,y)=(x*(x+1)/2)*(y*(y+1)/2) 令T=d*t 设f(T)= T可以分块.又由于μ是积性函数,积性函数的约束和 ...

  2. Linux安装jdk

    查看Java的版本命令:java -version 查看java版本的方法是:运行--->cmd,输入java –version.注意: java命令后是有个空格的,-version表示参数而已 ...

  3. 由提交storm项目jar包引发对jar的原理的探索

    序:在开发storm项目时,提交项目jar包当把依赖的第三方jar包都打进去提交storm集群启动时报了发现多个同名的文件错误由此开始了一段对jar包的深刻理解之路. java.lang.Runtim ...

  4. Microsoft.CodeAnalysis 入门

    1 安装 Microsoft.CodeAnalysis 我这里创建的是WPF的项目,首先再VS2015中用NuGet控制台进行安装 Install-Package Microsoft.CodeAnal ...

  5. 5.6 JS中基本包装类型

    为了便于操作基本类型值,ES还提供了三种特殊的引用类型,即(基本包装类型):Number,String,Boolean.这三种类型与前面介绍的引用类型相似,但同时也拥有基本数据类型的一些特性. 平时经 ...

  6. node-sass 在Mac中安装报错

    在做一个基于react项目要安装依赖的包时总是报一下错误 应该是node-sass的问题  找到官网下载跟我错误提示一样的文件也就是 darwin-x64-46 不同的系统不一样 修改为跟本地一样的名 ...

  7. shift粘滞键后门创建/复原批处理

    创建shift粘滞键后门: 1 c: 2 3 cd \Windows\System32\ 4 5 rename sethc.exe bak_sethc.exe 6 7 xcopy cmd.exe se ...

  8. 易企秀微场景2016最新完整版V10.5,小编亲测修复众多错误

    易企秀V10.5更新说明1.修复拨号英文错误2.修复转送场景问题3.修复设置场景密码乱码问题4.修复前台批量删除客户图片5.修复数据收集分页问题6.修复图片分类错乱问题7.修复音乐和特效冲突问题8.修 ...

  9. (十二)Maven生命周期和插件

    除了坐标.依赖以及仓库之外,Maven的另外两个核心概念是生命周期和插件.在有关Maven的日常使用中,命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段packag ...

  10. React Native APP结构探索

    APP结构探索 我在Github上找到了一个有登陆界面,能从网上获取新闻信息的开源APP,想来研究一下APP的结构. 附上原网址:我的第一个React Native App 具体来讲,就是研究一个复杂 ...