JavaScript 变量与函数定义详解:对象、数组与匿名函数

作者:异步漫步时间:2026-10-24 22:33:10浏览:279

本文深入解析JavaScript中变量与函数的多种定义方式。重点介绍对象直接量、数组直接量的创建语法,以及函数直接量(匿名函数)的三种定义形式。详细对比函数字面量与Function()构造函数的性能差异,并演示通过括号、void等技巧调用匿名函数的具体方法。

使用对象直接量创建对象:

对象与数组直接量定义

以下是对象直接量的代码示例:

var obj = {x:[1,2],y:23};

代码与下方示例等价。

上述代码等价于以下传统写法:

 
var obj=new Object();
obj.x=new Array(1,2);
obj.y=23;

测试用例:

遍历对象属性的测试代码如下:

 
for(var i in obj) alert(obj[i]);


函数直接量:它是一个表达式而非语句。

函数直接量与匿名函数调用

以下是函数直接量的基本调用形式:

(function(){})()

具体执行示例如下:


代码如下:

 
(function(){
document.write("some script code");
})() 
var a=(function(s){return s})("abc");
alert(a);
var b=function(s){return s};
alert(b("abc"));

如何理解这种调用机制?


大家应该熟悉这种赋值写法:


var a=function (){}


若要执行该函数,只需调用a()即可。


同理,若不通过变量存储直接执行,写法为:


function(){}()


但直接这样写会报错。


因为解析引擎在遇到}时判定函数定义结束,


并未将其作为代码块执行。


添加()可强制将function部分视为表达式块进行执行。



一、什么是匿名函数

JavaScript函数定义的三种方式

在Javascript中,定义函数主要有以下三种方式:



函数关键字声明(function)语句:


function fnMethodName(x){alert(x);}函数字面量(Function Literals):


var fnMethodName = function(x){alert(x);}Function()构造函数:


var fnMethodName = new Function('x','alert(x);')上述三种方式定义了同一个方法函数fnMethodName。第一种是最常用的声明方式;后两种是将一个匿名函数赋值给变量fnMethodName。实际上,许多语言都支持匿名函数。




二、函数字面量和Function()构造函数的区别

虽然函数字面量是匿名函数,但语法允许为其指定名称。在编写递归函数时,可以通过该名称调用自身,而使用Function()构造函数则无法做到这一点。


var f = function fact(x) {


if (x < = 1) return 1;


else return x*fact(x-1);


};

Function构造函数与函数字面量对比

Function()构造函数允许在运行时动态创建和编译JavaScript代码。在此方式上,它类似于全局函数eval()。



Function()构造函数每次执行时都会解析函数主体,并创建一个新的函数对象。因此,在循环或频繁执行的函数中调用Function()构造函数的效率非常低。相反,函数字面量在每次遇到时并不会重新编译。



使用Function()构造函数创建的函数不遵循典型的作用域规则,它始终将代码作为顶级函数执行。



代码如下:

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

函数直接量的表达式特性

只要处于表达式语法中,脚本宿主就会将function视为直接量函数;如果单独以function开头,则视为函数声明。将function放入表达式内部(如四则运算),宿主也会将其视为直接量,例如:


代码如下:

 
var a = 10 + function(){
return 5;
}(); 

更极端的例子如下:


代码如下:

 
(function(){
alert(1);
} ) ( ); 
( function(){
alert(2);
} ( ) ); 
void function(){
alert(3);
}() 
0, function(){
alert(4);
}(); 
-function(){
alert(5);
}(); 
+function(){
alert(6);
}(); 
!function(){
alert(7);
}(); 
~function(){
alert(8);
}(); 
typeof function(){
alert(9);
}(); 

JavaScript中定义函数的方法有多种,函数直接量是其中之一。例如var fun = function(){},如果function不赋值给fun,它就是一个匿名函数。





接下来看看如何调用匿名函数。



匿名函数的调用技巧

1、执行后获取返回值的函数调用


代码如下:

 
//方式一,调用函数,得到返回值。强制运算符使函数调用执行
(function(x,y){
alert(x+y);
return x+y;
}(3,4));
//方式二,调用函数,得到返回值。强制函数直接量执行再返回一个引用,引用在去调用执行
(function(x,y){
alert(x+y);
return x+y;
})(3,4);

2、执行后忽略返回值的调用


代码如下:

 
//方式三,调用函数,忽略返回值
void function(x) {
x = x-1;
alert(x);
}(9);

最后看看错误的调用方式示例


代码如下:

 
//错误的调用方式
function(x,y){
alert(x+y);
return x+y;
}(3,4);

作者最新文章

相关标签: