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语句分类:(注意语句都是有返回值的) 声明语句: 变量声明语句: 标签声明语句: 函数声明语句: 表达式语句:(表达式加分号) 变量赋值语句:具有声明一个变量的隐式效果: 函数调用语句; 属性赋值 ...
随机推荐
- apue第六章学习总结
apue第六章学习总结 1.关于阴影文件与口令 在口令文件当中,常见的字段有(以root为例): root(用户名):x(加密口令):0(uid):0(gid):root(注释字段):/root(用户 ...
- Android.mk详解
Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.要掌握jni,就必须熟练掌握Andr ...
- SGU 179 Brackets light(生成字典序的下一个序列)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=179 解题报告:输入一个合法的括号串,求出这个括号串的字典序的下一个串.(认为'(' ...
- HLG2040二叉树遍历已知前中,求后
二叉树的遍历 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 60(34 users) Total Accepted: 34(30 us ...
- Kali Linux下破解WIFI密码挂载usb无线网卡的方法
Kali Linux下破解WIFI密码挂载usb无线网卡的方法 时间:2014-10-12 来源:服务器之家 投稿:root 首先我要说的是,wifi密码的破解不是想象中的那么容易,目前还 ...
- Product of Array Exclude Itself
Given an integers array A. Define B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], calculate B WI ...
- iOS 中使用类别简化代码开发
最近需要一个函数,把CLLocation对象转化为NSDictionary,按照我以前的想法,我会写一个工具类,之后添加一个函数,类似这样 - (NSDictionary *)turnLocation ...
- MinGW/MSYS 交叉编译环境搭建
因为包的依赖关系不清楚,搭建时出错也不知道是什么原因,下面链接老外写的搭建步骤,写的非常详细还有脚本 已经编译的下载地址 http://ingar.satgnu.net/devenv/mingw32/ ...
- codeforces A. Table 解题报告
题目链接:http://codeforces.com/problemset/problem/359/A 题目意思:给出一个n行m列的table,你需要选择一个good cell(假设为(x, y), ...
- Java程序编译和运行的过程
Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程. 如下图,Java程序从源文件创建到程序运行要经过两大步骤:1.源文件由编译器编译成字节码(ByteCode) 2 ...