ps如何做网站轮播图,网站建设集群化的必要,天津平台网站建设企业,重庆市建设银行网站虽然文章标题是『语句与表达式』#xff0c;在这篇文章中#xff0c;我将陈述一个观点 每个表达式都有一个值。 在此之外#xff0c;也会继续表述这个『代码之谜』系列的主题——数学与计算机之间被经常忽略的矛盾。 简单的讲 “表达式”#xff08;expression#xff09;…虽然文章标题是『语句与表达式』在这篇文章中我将陈述一个观点 每个表达式都有一个值。 在此之外也会继续表述这个『代码之谜』系列的主题——数学与计算机之间被经常忽略的矛盾。 简单的讲 “表达式”expression是一个单纯的运算过程总是有返回值“语句”statement是执行某种操作没有返回值。使用表达式也是函数式编程语言所提倡的而传统命令式编程语言都是语句的堆砌。 表达式和语句如何区分呢 最简单最直观的鉴别方法就是 后面有分号的是语句 这是一个充分条件而不是必要条件。 有分号就是语句没有分号就不一定了也可能是语句也可能是表达式。 在动态语言——比如javascript——中是通过上下文来区分这两者的。 假如如果 function foo(){} 在一个赋值表达式的一部分则认为它是一个表达式。 表达式的一部分也是表达式。 而如果 function foo(){} 被包含在一个函数体内或者位于程序中则将它作为一个语句。 function foo(){}; // 声明因为它是程序的一部分
var bar function foo(){}; // 表达式因为它是赋值表达式的一部分new function bar(){}; // 表达式因为它是New表达式的一部分(function(){function bar(){}; // 声明因为它是函数体的一部分
})(); 还有一种不那么显而易见的表达式就是被包含在一对圆括号中—— (function foo(){})。 将这种形式看成表达式同样是因为上下文的关系 (和)构成一个分组操作符而 分组操作符只能包含表达式 (function foo(){}); // 函数表达式注意它被包含在分组操作符中
(var x 5); // error! 分组操作符只能包含表达式不能包含语句这里的var就是语句 今天突然有人问我 alert(eval(data)); 为什么会报错呢data 是一个对象按理说应该会弹出 ObjectObject 啊。 这是因为当我们写 {username : justjavac} 时它并不是一个对象。 因为我们知道有一种表示数据的方法叫做 jsonjavascript对象表示法 所以想当然的认为这应该是一个对象。 其实在大部分编程语言中大括号{}表示的不是对象而是代码块这段代码其实等价于 {username : justjavac
} 很显然username : justjavac 并不是合法的语句。 然而解决方法也很简单就是添加括号——分组操作符 ({username : justjavac}) 这样就构成了一个合法的表达式当我们进行 json 对象解析的时候可以写如下代码 eval(( json )) 在表达式中只能存在表达式不能存在语句。 例如表达式 (var a 4) 4; 这段代码将产生一个错误因为 var a 4 是一个语句 而不是表达式—— 对表达式求值必须返回值但对语句求值则未必有返回值。 类似的 if (var a 0) {} 也产生错误因为 var a 0 是一条语句而 语句没有返回值。if 语句的语法结构为 if (expression) {statement;statement;……
} 因此 if (var a 0) {} 是错误的但是 if (true) {var a 0;
} 则是正确的。 最后重申一下每个表达式都有一个值。 理解了这个就可以很容易的理解 FP函数式编程的一些核心思想了。转载于:https://www.cnblogs.com/justjavac/archive/2012/11/15/codepuzzle-expression-and-statement.html