js:语言精髓笔记6----作用域
js基础语法:由语句、表达式和变量构成; 语句是主要表达方式:单语句->复合语句(代码块)->程序片段(函数);js中没有单元和程序的概念;
作用域:
语法作用域与变量作用域的区别:前者是语法分析阶段对代码块组织结构的理解;后者是代码执行阶段对变量存储的理解;
(有些地方也成为静态作用域和动态作用域)
1.语法作用域
- 语法作用域的级别:
- 表达式:
- 语句:
- var ....... ; //语法关键字表示特定行为,省略部分为目标,不能是符合语句;
- if()..else..; for()....; do..while(); while()....; with().....; //省略部分可以是单行语句或符合语句;
- 批语句:
- switch(){} ; try{} catch(){} finally{}; //用{}来限制一段代码块作为它的语法作用域;
- 函数:
- function(){}; //以函数所声明的代码块为作用域;这里可以理解为什么函数声明形式解析后会全部提前,而函数表达式则只是变量名提前的不同;
- 全局:
- 语法作用域之间的关系:
- 平行:
- 嵌套:
- 相同级别可以互相嵌套;
- 高级别可以包含低级,反之不能;
- 执行流程:
- 基本流程:顺序执行;
- 变更: //break [label]不能跨越函数的语法作用域;
- 语句:
- continue/break/continue [label] //仅对循环语句构成影响;
- break [label] //对标签化语句构成影响;
- 批语句:
- break //对多重分支构成影响;
- 函数:
- return [] //对函数构成影响;
- 全局:
- throw..... //对全局代码构成影响;即代码在全局在停止;
- 语句:
2.变量作用域
- 变量作用域的级别:
- 表达式:(直接量)
- 常量:
- 变量:js中表达式级别的变量都是匿名的,如匿名函数,对象直接量等;
- 语句:js并没有语句基本的变量作用域;
- 函数:常见的局部变量;
- 全局:常见的全局变量; //是否使用var对其处理规则是有影响的;
- 表达式:(直接量)
- 变量生存周期:
- 创建:
- 引擎做语法分析,发现显示声明时;
- 引擎做代码执行,发现试图写(如赋值)一个未被创建的变量时;
- 释放:
- 引擎执行到函数结束/退出操作时,将清楚函数内的未被引用的变量;
- 引擎执行到全局的代码块终结或引擎预载和重新载入时,将清除全局的变量和数据的引用;
- 创建:
js:语言精髓笔记6----作用域的更多相关文章
- js:语言精髓笔记11--动态语言特性(1)
语言:程序最终被表达为数据(结构)和逻辑(算法),命令式和说明式/函数式语言分别从这两方面分类: 动态:在语言陈述时无法确定,必须在计算机执行时才能确定语言关系:JS是完全动态语言,导致其不确定性一般 ...
- js:语言精髓笔记8--对象系统
封装: 一把对象系统,封装是由语法解析来实现的,即语法作用域:但js是动态语言,因此只能依赖变量作用域: js的变量作用域只有表达式,函数,全局三种:所以js只能实现public和private两种封 ...
- js:语言精髓笔记1--标识符与基本类型
标识符: 命名: 语法以及类型----语法关键字 //逻辑 值(的存储位置)----变量和常量 ...
- js:语言精髓笔记12--动态语言特性(2)
对于括号内: 通过赋值时发生的重写: (Object1 = function() {}).prototype.value = 100; var obj1 = new Object1; console. ...
- js:语言精髓笔记9--函数式语言特征
形式化运算系统的研究: 图灵:提出图灵机形式系统,通过0,1运算系统来解决复杂问题: 冯诺依曼:提出了冯诺依曼体系:即通过修改内存反映运算结果: 阿隆左.丘奇:提出新的运算范型Lambda演算,计算机 ...
- js:语言精髓笔记7----原型继承
面向对象有三个基本特性:封装,继承,多态:如果都满足的话称为面向对象语言:而部分满足则称为基于对象语言: 数据类型实现模型描述: JavaScript对象模型: 构造过程:函数->构造器 构造器 ...
- js:语言精髓笔记5----语言分类
计算模型:源于对计算过程的不同认识: 1.基于不同计算模型一般分为://教科书的一般分类 命令式语言: 函数式语言: 逻辑式语言: 面向对象程序设计语言: 2.基于程序本质分类: //编程的经典法则 ...
- js:语言精髓笔记10--闭包
闭包: //JS函数式风格中,在内部保存数据和对外无副作用这两个特性主要就是通过闭包实现的: 函数与闭包: 一个函数是一段静态代码,它是一个代码书写时已经编译期,静态概念:闭包是函数在代码运行过程中 ...
- js:语言精髓笔记3----语句
JS语句分类:(注意语句都是有返回值的) 声明语句: 变量声明语句: 标签声明语句: 函数声明语句: 表达式语句:(表达式加分号) 变量赋值语句:具有声明一个变量的隐式效果: 函数调用语句; 属性赋值 ...
随机推荐
- Run UliPad 4.1 Under Windows 7 64bit and wxPython 3.0.2
Abstract: UliPad that is developed by limodou is an excellent code editor. It works well with wxPyth ...
- editplus快捷键大全之editplus搜索快捷键
前面我们说了editplus快捷键大全之editplus文件快捷键和editplus快捷键大全之editplus光标快捷键,editplus快捷键大全之editplus编辑快捷键这里我们讲一下edit ...
- Linux生产服务器Shell脚本分享
Linux生产服务器Shell脚本分享 2012-6-6 86市场网 linux 作为一名Linux/unix系统管理员,我经常遇到人问这个问题:shell能做什么?PHP这么强大,为什么不用PHP来 ...
- ssh连接慢的问题的解决?
<1>群中同学遇到的问题,我之前在uuwatch也遇到了同样的问题? 问个问题师兄们 突然之间 公司服务器连接很慢 连一个shell需要10几秒钟 服务器就在公司全是内网服务器, 我也不知 ...
- JQuery $(function(){})和$(document).ready(function(){})
document.ready和onload的区别——JavaScript文档加载完成事件页面加载完成有两种事件一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件)二是onload,指 ...
- EtherCAT报文寻址
EtherCAT通信通过主站发送EtherCAT数据帧读写从站设备的内部存储区实现. 一个EtherCAT网段相当于一个以太网设备,主站首先通过以太网数据帧头的MAC地址寻址到网段,然后使用Ether ...
- ffplay mini 媒体播放器
下载 http://pan.baidu.com/s/1dDcp3lZ 一定要解压到 D:\ffplay\ 目录下 双击 OpenWith_FFPlay_mini.reg 注册ffplay 在视频文件名 ...
- java静态与非静态区别
这里的静态,指以static关键字修饰的,包括类,方法,块,字段. 非静态,指没有用static 修饰的. 静态有一些特点: 1.全局唯一,任何一次的修改都是全局性的影响 2.只加载一次,优先于非静态 ...
- Fresco 源码分析(一) DraweeView-DraweeHierarchy-DraweeController(MVC) DraweeHierachy+DraweeController的分析
4.1.5.2 模型层DraweeHierachy继承体系以及各个类的作用 DraweeHierachy (I) --| SettableDraweeHierarchy (I) ------| Gen ...
- WordPress主题制作函数
WordPress基本模板文件 一套完整的WordPress模板应至少具有如下文件: style.css: CSS(样式表)文件 index.php: 主页模板 archive.php: Archiv ...