javascript语句——表达式语句、块语句、空语句和声明语句
前面的话
如果表达式在javascript中是短语,那么语句(statement)就是javascript整句或命令。表达式计算出一个值,语句用来执行以使某件事发生。javascript程序无非就是一系列可执行语句的集合,javascript解释器依照语句的编写顺序依次执行。本文将介绍javascript语句中的四类语句——表达式语句、块语句、空语句和声明语句
表达式语句
表达式语句(expression statement)是javascript中最简单的语句,赋值、delete、函数调用这三类即是表达式,又是语句,所以叫做表达式语句
//赋值语句
greeting = 'hello ' + name;
i* = 3; //递增运算符(++)和递减运算符(--)和赋值语句有关,它们的作用是改变一个变量的值,就像执行一条赋值语句一样
counter++; //delete运算符
delete o.x; //函数调用
alert(greeting);
window.close();
cs = Math.cos(x);
javascript语句以分号结束,但表达式不需要分号结尾。一旦在表达式后面添加分号,则javascript引擎就将表达式视为语句,这样会产生一些没有任何意义的语句(表达式语句除外)
1 + 3;
'abc';
块语句
块语句又叫复合语句,javascript将多条语句联合在一起,形成一条复合语句(compound statement)
复合语句只须用花括号将多条语句括起来即可
{
x = Math.PI;
cx = Math.cos(x);
console.log(cx);
}
关于块语句,有以下几点注意事项:
【1】语句块的结尾不需要分号。块中的原始语句必须以分号结束,但语句块不需要
【2】语句块中的行都有缩进,这不是必须的,但整齐的缩进能让代码可读性更强,更容易理解
【3】javascript中没有块级作用域,在语句块中声明的变量并不是语句块私有的(不包括es6)
{
var i = 0;
console.log(i++);//
}
console.log(i++);//
空语句
在javascript中,当希望多条语句被当做一条语句使用时,使用复合语句来替代。空语句(empty statement)则恰好相反,它允许包含0条语句
;
javascript解释器执行空语句时不会执行任何动作。但当创建一个具有空循环体的循环时,空语句是有用的
在下面这个循环中,所有的操作都在表达式a[i++]=0中完成,这里并不需要任何循环体。然而javascript需要循环体中至少包含一条语句,因此,这里只使用了一个单独的分号来表示一条空语句
//初始化一个数组a
for(i = 0; i < a.length; a[i++] = 0);
在for、while循环或if语句的右圆括号后的分号很不起眼,这可能造成一些bug,而这些bug很难定位到
//因为;的多余,造成与预想不同的结果
if((a == 0) || (b == 0));
o = null;
如果有特殊目的需要使用空语句,最好在代码中添加注释,这样可以更清楚地说明这条空语句是有用的
for(i = 0; i < a.length; a[i++] = 0)/*empty*/;
声明语句
声明语句包括变量声明和函数声明,分别使用var和function关键字
var语句用来声明一个或者多个变量,关键字var之后跟随的是要声明的变量列表,列表中的每一个变量都可以带有初始化表达式,用于指定它的初始值
var name_1 [ = value_1] [,...,name_n[=value_n]]
var i ;
var j = 0;
var p,q;
var x = 2, y = r;
关键字function用来定义函数,funcname是要声明的函数的名称的标识符,函数名之后的圆括号中是参数列表,参数之间使用逗号分隔。当调用函数时,这些标识符则指代传入函数的实参
函数体是由javascript语句组成的,语句的数量不限,且用花括号括起来。在定义函数时,并不执行函数体内的语句,它和调用函数时待执行的新函数对象相关联
function funcname([arg1 [,arg2 [...,argn]]]){statement}
function语句里的花括号是必需的,这和while循环和其他一些语句所使用的语句块是不同的,即使函数体内只包含一条语句,仍然必须使用花括号将其括起来
//正确
function hypotenuse(x,y){
return Math.sqrt(x*x + y*y);
}
//错误
function hypotenuse(x,y)
return Math.sqrt(x*x + y*y);
函数声明语句和函数定义表达式包含相同的函数名,但二者有所不同
//表达式
var f = function(x){return x+1;}
//语句
function f(x){return x+1;}
函数定义表达式只有变量声明提前了,变量的初始化代码仍然在原来的位置;而函数声明语句的函数名称和函数体均提前,脚本中的所有函数和函数中所有嵌套的函数都会在当前上下文中其他代码之前声明,也就是说,可以在声明一个javascript函数之前调用它
console.log(f1(0));//Uncaught TypeError: f1 is not a function
var f1 = function(x){return x+1;} console.log(f2(0));//
function f2(x){return x+1;}
变量声明语句和函数声明语句有几点相似之处
【1】变量声明语句和函数声明语句都会提前
console.log(a);//undefined
var a = 0;
console.log(a);// console.log(f(0));//
function f(x){return x+1;}
console.log(f(0));//
【2】变量声明语句和函数声明语句创建的变量都无法删除
var a = 0;
delete a;
console.log(a);//0 function f(x){return x+1;}
delete f;
console.log(f(0));//
参考资料
【1】 ES5/语句 https://www.w3.org/html/ig/zh/wiki/ES5/statements
【2】 阮一峰Javascript标准参考教程——语法概述 http://javascript.ruanyifeng.com/grammar/basic.html#toc12
【3】《javascript权威指南(第6版)》第5章 语句
javascript语句——表达式语句、块语句、空语句和声明语句的更多相关文章
- Javascript中表达式和语句的区别
一.表达式:一个表达式会产生一个值,它可以放在任何需要一个值的地方,比如,作为一个函数调用的参数. 以下例子就是表达式: a=35: b=1+a; a=function (){return 6}: b ...
- 嵌入式C语言自我修养 03:宏构造利器:语句表达式
3.1 基础复习:表达式.语句和代码块 表达式 表达式和语句是 C 语言中的基础概念.什么是表达式呢?表达式就是由一系列操作符和操作数构成的式子.操作符可以是 C 语言标准规定的各种算术运算符.逻辑运 ...
- Linux高级之语句表达式
表达式 表达式和语句是 C 语言中的基础概念.什么是表达式呢?表达式就是由一系列操作符和操作数构成的式子.操作符可以是 C 语言标准规定的各种算术运算符.逻辑运算符.赋值运算符.比较运算符等.操作数可 ...
- JavaScript中:表达式和语句的区别
JavaScript中:表达式和语句的区别 Javascript语言精粹:表达式是由运算符构成,并运算产生结果的语法结构.程序是由语句构成,语句则是由“:(分号)”分隔的句子或命令.如果在表达式后面加 ...
- JavaScript 中表达式和语句的区别
1.语句和表达式 JavaScript中的表达式和语句是有区别的.一个表达式会产生一个值,它可以放在任何需要一个值的地方,比如,作为一个函数调用的参数.下面的每行代码都是一个表达式: myvar3 + ...
- 【C# 基础概念】表达式(expression)、语句(statement)、块(block),指令(using)
官方链接:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/statements-expressions-operato ...
- java基础-表达式,语句和代码块
浏览以下内容前,请点击并阅读 声明 表达式 表达式由变量,操作符和方法调用组成,表达式的返回值类型由表达式中的元素(如操作符,变量等)决定如: cadence = 0 上述代码将返回一个int类型的值 ...
- Java代码三级跳——表达式、语句和代码块
Java代码三级跳—表达式.语句和代码块 表达式(expression):Java中最基本的一个运算.比如一个加法运算表达式.1+2是一个表达式,a+b也是. 语句(statement):类似于平时说 ...
- js之语句(表达式语句,复合语句,声明语句)
语句就是JavaScript整句或命令,以分号结束,用来执行以使某件事发生.下面将介绍三种语句:表达式语句,复合语句,声明语句. 一.表达式语句 表达式语句是javascript中最简单的语句 < ...
随机推荐
- 51NOD算法马拉松11 B君的竞技场
传送门 这题我在比赛的时候竟然没有想出来,真是-- 这道题我们可以想一想怎么搞定获胜的概率p. 我们发现再怎么这个p都是搞不了的.所以我们可以积一下分,然后就可以不用去管p了.我们要做的就是求出一个关 ...
- HDU 1051 Wooden Sticks
题意: 有 n 根木棒,长度和质量都已经知道,需要一个机器一根一根地处理这些木棒. 该机器在加工过程中需要一定的准备时间,是用于清洗机器,调整工具和模板的. 机器需要的准备时间如下: 1.第一根需要1 ...
- [XAF] How to define a business class at runtime or allow end-users to configure its members via the application UI?
How to define a business class at runtime or allow end-users to configure its members via the applic ...
- java面向对象(封装-继承-多态)
框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...
- PHP中实现MySQL嵌套事务的两种解决方案
PHP中实现MySQL嵌套事务的两种解决方案 一.问题起源 在MySQL的官方文档中有明确的说明不支持嵌套事务: Transactions cannot be nested. This is a co ...
- js学习笔记之一
一.Javascript 中的对象 1. 建立自定义对象 方法1:对象={属性1:属性值1,属性2:属性值2……属性n:属性值n} 方法2:先定义构造函数,再new创建对象实例. 如: functio ...
- 基于EasyUi ComBotree树修改 父节点选择问题
本人在使用 Easy UI 期间发现了一个不太适合项目的bug,可能也不算bug把 . 毕竟不同项目背景 取舍不同. 我在做网元树选择的时候 发现当选取父节点后,子节点都会被选择 返回 .但是如 ...
- 找回消失的ASUS显卡
笔记本蓝屏了几次之后,发现独立显卡GT335M不见了,设备管理器,驱动精灵,都找不到,网上问这个问题的人还不少,得到的回答几乎都是说重装驱动.根本不行,这时候安装nVIDIA驱动,会提示说“未找到兼容 ...
- 解剖SQLSERVER 完结篇 关于Internals Viewer源代码
解剖SQLSERVER 完结篇 关于Internals Viewer源代码 大家可能都用过Internals Viewer这个软件 <查看SQLSERVER内部数据页面的小插件Internals ...
- CrossOver 13.0 发布,Windows 模拟器
允许在 Linux 和 OS X 平台运行 Win32 程序的 CrossOver 套件发布 13.0 版本,带来了完全重构的 3D 处理流程,将大幅度提高游戏性能. Linux 平台相关变化有: 带 ...