字面量、对象字面量、函数字面量、函数定义

#1.字面量(literal)
用于表达一个固定值的表示法,又叫常量。
【JS程序执行到代码中的字面量,会立即知道它是什么类型的数据,值是多少】
#2.对象字面量
语法:

{
	k1:v1, 
	k2:v2,
	...
	kn:vn
}   

k:属性名
v:属性值(任意类型,如简单类型数据、函数、对象)
【数据与数据之间用逗号分隔,最后一个数据后面不加逗号】
#3.函数字面量
javascript
//创建一个名为 add 的变量,并用来把两个数字相加的函数赋值给它。
var add = function (a,b) {
return a + b;
};
函数字面量包括4个部分:

(1)保留字 function
(2)函数名(可被省略)
(3)包围在圆括号中的一组参数。
(4)包围在花括号中的一组语句。这些语句是函数的主体,它们在函数被调用时执行。

#4.函数的定义
一般有如下三种方式:

(1)函数关键字(function)语句:
function fn(x){ alert(2); }
(2)函数字面量(Function Literals):(或函数表达式)
var fn = function(x){ alert(2); }
【调用函数表达式,方法是给变量名加()执行,不能使用函数名加()执行】

var fn =  function add() {
        alert(2);
    } //函数表达式
fn();  //调用时变量名加()

var obj = {
	fn:	function() {
		alert(2);
	}
}  //创建对象字面量,属性值为函数
obj.fn();  //调用时对象名打点加属性名和()

(3)Function()构造函数:
var fn= new Function( 'x','alert(x);' )
【匿名函数直接加()调用】
注意用作块级作用域的匿名函数,将函数声明包含在一对圆括号中,而紧随其后的一对圆括号会立即调用这个函数:
(function() {alert(2);})(); // 自调用函数
#5.函数字面量和Function()构造函数的区别
(1)虽然函数字面量是一个匿名函数,但语法允许为其指定任意一个函数名,当写递归函数时可以调用它自己,使用Function()构造函数则不行。

  var f = function fact(x) {
    if (x < = 1) return 1;
    else return x*fact(x-1);
  };

(2)Function()构造函数允许运行时Javascript代码动态的创建和编译。在这个方式上它类似全局函数eval_r()。
(3)Function()构造函数每次执行时都解析函数主体,并创建一个新的函数对象。所以当在一个循环或者频繁执行的函数中调用Function()构造函数的效率是非常低的。相反,函数字面量却不是每次遇到都重新编译的。
(4)用Function()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。

  var y = "global";
  function constructFunction() {
      var y = "local";
      return new Function("return y");  //  无法获取局部变量
  }
  alert(constructFunction()());  // 输出 "global"

部分内容转自博主 灵熙兔