#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"
部分内容转自博主 灵熙兔