通常定义函数并调用
function a(){
}
a();
或是
var a = function(){
}
a();
但是查看jquery源码会发现它最外层的架构是这样的
(function( window, undefined ) {
// jquery code
})(window);
解释:首先jquery是定义了一个匿名函数(所谓的匿名函数就是没有名字的函数,顺便说一下闭包的概念:闭包就是在一个函数内部定义一个函数指向外部函数的一个成员变量,并且内部定义的这个函数访问外部函数中定义的临时变量)
,在最上面的例子中a实际上是function的一个引用,只要在函数的引用后面添加()就能让函数执行,那可不可以直接在匿名函数后面添加()让匿名函数执行呢
function(){}()
执行你会发现报错,javascript引擎在扫描到function时会认为这个一个函数的声明,所以直接在后面调用()会报错,在一个语句后面直接添加括号和一个表达式后面添加括号是两个概念,在语句后面添加的操作符会被认为是分组符号,分组符号内部需要传入表达式才行,如果上面的改成function(){alert("1")}(1)就不会报错,但是上面的函数还是不会执行,这只是相当于定义了2个毫无关系的表达式,function (){} (1);在表达式后面添加括号会让表达式立即执行,但是如果是一个表达式后面添加()就会执行,所以
在匿名函数外面添加()然后再在括号后面添加()就可以进行调用了
javascript中()括起来的部分是不能包含语句的,会被当作表达式处理,所以如果function被()括起来以后就被javascript引擎作为function表达式处理了。
因此jquery最外层就是一个自调用匿名函数。但是他这么做的最大原因是想定义一个命名空间,这样就不会和全局的变量出现冲突
下面的例子是说明()的作用,()可以强制js片段执行
//方式1,调用函数,得到返回值。强制运算符使函数调用执行
(function(x,y){
alert(x+y);
return x+y;
}(3,4));
//方式二,调用函数,得到返回值。强制函数直接量执行再返回一个引用,引用再去调用执行
(function(x,y){
alert(x+y);
return x+y;
})(3,4);
//arguments.callee([参数])被用于函数内部的递归调用,这种是匿名的递归函数
也可以使用命名的递归函数,如
function factorial (x) {
if (x <= 1) {
return 1;
} else {
return x * factorial(x-1);
}
}
function和new Function()的区别
var a = function (){alert(1)}
var b = new Function('alert(1)');//大写F
new Function()与new Array()相似,都是用javascript自带的功能返回一个function或者数组
所以上面a跟b是相同的,最终都是function
分享到:
相关推荐
JS自调用匿名函数是一种在JavaScript编程中广泛使用的技术,它的目的是创建一个临时的命名空间,以避免全局命名空间污染。通过这种方式,可以在函数内部定义局部变量和函数,而不会影响到全局变量,有效防止局部变量...
在JavaScript中,自调用匿名函数通常用于封装局部变量和逻辑,以提高代码的可读性和可维护性。以下是三种常用的自调用匿名函数的写法: 1. **IIFE(Immediately Invoked Function Expression)**: 第一种和第二种...
这段代码演示了匿名函数如何自我调用,尽管初次调用时传入的是空字符串,但在返回`arguments.callee`后,可以再次调用自身,传入不同的参数。这种技巧在实现递归等复杂逻辑时非常有用。 4. **不同操作符前缀匿名...
这是最常见的调用匿名函数的方式之一。通过在函数表达式后面添加一对圆括号`()`,可以立即执行该函数。 ```javascript (function() { alert("立即执行匿名函数"); })(); ``` 这种写法的目的是创建一个只运行一次...
自执行匿名函数之所以能够实现自我执行,是因为JavaScript引擎将一对小括号`()`视为一种操作符,用于调用括号内的函数。因此,当我们在定义匿名函数后紧跟一对小括号时,实际上是在告诉JavaScript引擎:“这是一个...
### JavaScript中匿名函数的创建与调用方法分析 #### 一、概述 在JavaScript中,函数是一等公民,这意味着函数可以作为参数传递给其他函数,也可以作为其他函数的返回值。这种灵活性使得JavaScript中的函数非常强大...
**匿名函数**,又称**拉姆达函数**,是一种在JavaScript中常见的函数形式,这类函数没有名称,因此不能像命名函数那样通过名称来调用。匿名函数通常作为临时使用的函数,在需要的地方直接定义并执行。 ##### 特点:...
匿名函数的创建可以使用new关键字调用匿名初始化器,例如: ```csharp var p1 = new { Name = "张三", Age = 28 }; ``` 在上面的代码中,我们使用new关键字调用匿名初始化器,创建了一个匿名类型对象。匿名类型直接...
匿名函数的基本用法是handle = @(arglist)anonymous_function,其中 handle 是调用匿名函数时使用的名字,arglist 是匿名函数的输入参数,可以是一个,也可以是多个,用逗号分隔,anonymous_function 是匿名函数的...
匿名函数 5.5 匿名函数 函数表达式 概念:所谓函数表达式指的是将声明的函数赋值给一个变量,通过变量完成函数的调用和参数的传递,它也是JavaScript中另一种实现自定义函数的方式。 5.5 匿名函数 函数表达式 var fn...
`void`运算符用于执行表达式并返回`undefined`,因此我们可以用它来调用匿名函数,例如 `void function(x) { alert(x); }(9);`。 4. **使用`-`/`+`运算符**: `-`和`+`运算符可以将匿名函数转换为数值,然后立即...
错误模式下,匿名函数的声明和调用不被支持,会导致语法错误。函数字面量模式则是声明一个函数对象后执行它。优先表达式利用圆括号来强制执行声明的函数,而Void操作符则通过void操作符来执行一个单独的操作数。 ...
- **自调用匿名函数**:可以在定义的同时立即执行匿名函数。 ```javascript alert((function fun(a, b) { return a + b; })(10, 20)); ``` - **链式调用**:可以连续调用匿名函数,每次调用都返回`arguments....
4. **使用运算符调用匿名函数**: - `void`运算符: ```javascript void function() { alert('water'); }(); ``` - `+`、`-`、`~`、`!`运算符: ```javascript +function() { alert('water'); }(); -function...
匿名函数的基本用法为 `handle = @(arglist)anonymous_function`,其中 `handle` 为调用匿名函数时使用的名字,`arglist` 为匿名函数的输入参数,可以是一个,也可以是多个,用逗号分隔,`anonymous_function` 为...
在这个例子中,匿名函数被赋值给变量`box`,并且可以通过变量名来调用这个函数,也可以通过IIFE立即执行这个函数,并且可以传递参数。 匿名函数的主要好处在于它们的灵活性和一次性的用法。匿名函数通常用于回调...