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语句分类:(注意语句都是有返回值的) 声明语句: 变量声明语句: 标签声明语句: 函数声明语句: 表达式语句:(表达式加分号) 变量赋值语句:具有声明一个变量的隐式效果: 函数调用语句; 属性赋值 ...
随机推荐
- 转<<C#集合Dictionary中按值的降序排列
转载地址:http://blog.sina.com.cn/s/blog_5c5bc9070100pped.html C#集合Dictionary中按值的降序排列 static void Main(st ...
- Python文件基础
===========Python文件基础========= 写,先写在了IO buffer了,所以要及时保存 关闭.关闭会自动保存. file.close() 读取全部文件内容用read,读取一行用 ...
- TCPIP三次握手详情
TCP正常建立和关闭的状态变化 TCP连接的建立可以简单的称为三次握手,而连接的中止则可以叫做 四次握手. 建立连接 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第 ...
- 关于showModalDialog()对话框点击按钮弹出新页面的问题
页面a.aspx上,单击按钮a,走脚本,弹出showModalDialog("b.aspx",....) 在b.aspx上有个服务器控件按钮b,单击按钮,更新数据后,会弹出一个新的 ...
- [Effective JavaScript 笔记]第61条:不要阻塞I/O事件队列
js程序是构建在事件之上的.输入可能来自不同的外部源.在一些语言中,我们习惯地编写代码来等待某个特定的输入. var text=downloadSync('http://example.com/fil ...
- Unity 烘焙材质到单一贴图的脚本
原地址:http://www.cocoachina.com/gamedev/gameengine/2011/0406/2756.html 这个脚本由 CocoaChina 版主 “四角钱” 分享,可以 ...
- zookeeper 配置详解
http://blog.csdn.net/shenlan211314/article/details/6185176 因博主原创,所以不能转载 下面是更为详细的配置说明: 前面两篇文章介绍了Zook ...
- NYOJ 61传纸条(一) 双线程DP问题
http://www.cnblogs.com/HpuAcmer/archive/2012/05/06/2486591.html 题目链接:http://acm.nyist.net/JudgeOnlin ...
- CC MayClg 15 T3
www.codechef.com/MAY15/problems/CHAPD 一道比较神奇的题目... 看到题目后自己yy出了个傻逼算法...然后对拍都是对的...提交都是错的...然后一看" ...
- 在CentOS 6.4中编译安装gcc 4.8.1
在CentOS 6.4中编译安装gcc 4.8.1 分类: C/C++ Linux/Unix2013-11-28 21:02 1877人阅读 评论(0) 收藏 举报 原文链接:http://www.c ...