javascript基础篇:表达式

大家可能会时常听到表达式这个词语,感觉也就是那样,但是真正想想,是个什么样,还可能真说不出来,其实看似平淡无奇实则暗流涌动,遇到的话一不小心就可能会栽倒在表达式的手里。

好了不扯淡了,我们回正题。

表达式

我们先看一下维基百科对表达式的定义是什么

表达式是由数字、运算符、数字分组符号(如括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。~~约束变量在表达式中已被指定数值,而自由变量则可以在表达式之外另行指定数值。一个表达式代表一个函数,其输入为自由变量的定值,而其输出则为表达式因之后所产生出的数值。 ——维基百科

这句话听起来是那么的咬口,其实表达式就是一个短语,javascript会将其计算出一个结果,比如0/1,‘xxx’,null等等。这些其实都是表达式;变量名也是表达式,比如var a,计算出来的结构赋值给变量的值也是表达式,上面的这些都是简单的表达式,几个简单的表达式可以组成复杂的表达式,[1,2,3]数组,我们也可以通过运算符将简单表达式组合位复杂表达式,8+9这样,JavaScript表达式有几种形式

1.原始表达式

常量、变量、保留字

2.对象、数组初始化表达式

var obj={a:1,b:2}; 
   var  a=[1,2,3];

3.函数定义表达式

var fn=function(){}

4.属性访问表达式

Math.abs

5.调用表达式

alert('hello word');

6.对象创建表达式

new object();

从上面我们理解清楚了吧。竟然可以分为这么多表达式。

说到这里。我们可以延伸一下,我们开发所常见的立即执行函数说起

立即执行函数

初学JavaScript的同学很容易被类似这样的东西唬住

(function(){})();

其实我们了解了表达式就能很清楚的看明白这是什么结构了

(函数定义表达式)函数调用表达式

也就是说先创建了一个匿名函数,然后不传入参数调用它,这就变成了“立即执行函数”,知道了这些看个传入参数调用的立即执行函数题目

(function f(f){ 
        return typeof f();// "number" 
    })(function(){return 1;});

这个题目事实上还涉及了一些其它的知识,立即执行函数不再是以空括号()来调用了,同事传入了一个function作为参数传入调用。再一个疑惑就是typeof f() 中的f究竟指谁,这个知识我们后面会介绍道,简单说一下,当函数执行有命名冲突的时候,函数依次填入 变量=》函数=》参数,所以最后被填入的参数f会覆盖函数定义f,typeof f()是对参数的调用,参数是立即执行函数传入的function参数,返回数字1,typeof 1是 "number"。

到这里就结束了。越说越多。后面还有正则表达式。很强大的。知道jq的同学,有兴趣可以研究一下jq的源码,里面就是正则的天堂。强大的正则。膜拜。。。

下章我们讲一下运算符,其实我主要想表达的重点是运算符的优先级。

原文地址:https://www.cnblogs.com/TimJs/p/3627088.html