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语句分类:(注意语句都是有返回值的) 声明语句: 变量声明语句: 标签声明语句: 函数声明语句: 表达式语句:(表达式加分号) 变量赋值语句:具有声明一个变量的隐式效果: 函数调用语句; 属性赋值 ...
随机推荐
- JQ系列:css操作
JQ中的 .css()有三种使用方法: $('#p').css('width'); 取得ID为p的样式属性的width值;等同 return width $('#p').css('width','10 ...
- AJAX创建表格,删除数据
主页面 <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8 ...
- Java 参数的一些心得
java 对象入参是传入的是引用(一块内存), 基础类型是值(复制内容),测试代码如下 public class TestA { private String name; public String ...
- js检测是否安装了flash插件
function flashChecker() { var hasFlash = 0; //是否安装了flash var flashVersion = 0; //flash版本 var isIE = ...
- 2维特征Feature2D(转)
转自:http://blog.csdn.net/yang_xian521/article/details/6901762 主要介绍的是如何用SURF进行特征匹配,和SIFT的使用方法基本一致.
- puppet之自定义fact(转载)
1.使用环境变量'FACTERLIB'创建fact 1.1.在自定义目录里面定义一个fact,列出当前系统登录的用户数 [root@agent1 ~]# vim /var/lib/puppet/kis ...
- SPFA算法心得
SPFA算法是改进后的Bellman-Ford算法,只是速度更快,而且作为一个算法,它更容易理解和编写,甚至比Dijkstra和B-F更易读(当然,Floyd是另一回事了,再也没有比Floyd还好写的 ...
- Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说。。。
Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说... root@xi4ojin:~# cd ...
- 解决php configure: error: Cannot find ldap libraries in /usr/lib.错误
解决php configure: error: Cannot find ldap libraries in /usr/lib.错误 iitshare 分类:Linux,PHP,项目实施 | 标签:Ca ...
- Shell脚本中判断输入参数个数的方法投稿:junjie 字体:[增加 减小] 类型:转载
Shell脚本中判断输入参数个数的方法 投稿:junjie 字体:[增加 减小] 类型:转载 这篇文章主要介绍了Shell脚本中判断输入参数个数的方法,使用内置变量$#即可实现判断输入了多少个参数 ...