除了基本的脚本语言的函数使用,JavaScript的函数还有其它几种特殊的用法,总结一下有以下几种:
自调用匿名函数
先来看一个例子:
(function(){
alert("blessdyb");
})();
虽然看起来比较恐怖,但思路很简单。我们将一个匿名函数放在一对括号中,同时这对括号后面也有另一对表示执行前面括号中匿名函数的括号。当然,第二个括号的也可以用来进行参数传递。如下面的代码实现和上面相同的功能:
(function(x){
alert(x);
})("blessdyb");
使用这种函数的好处就是我们可以省去建立一些全局变量,但同时也能实现很多工作。当然,如果我们不想一些函数被调用多次,也可以通过这样的方式来实现。这种方式最适合那些只执行一次的工作或者初始化类的工作。
内部(私有)函数
在JavaScript中,函数可以看做是一种特殊形式的数据。所以我们就可以考虑在函数中来定义函数。同时考虑到JavaScript中的变量作用域是以函数为单位来划分的,所以我们在函数内部定义的函数就变成了私有的函数。如下:
function outFunction(param1){
function innerFunction(param2){
return param2*2;
}
return innerFunction(param1);
}
很明显,上述代码中的innerFunction()就是一个outFunction()的内部私有函数。使用这种形式来定义函数,主要有两点好处:
- 可以保证命名空间的简洁性,避免我们多个合作开发自己的函数库时出现的命名冲突。
- 实现功能调用的权限控制,即通过私有函数来保证使用者不通过一些特殊函数的调用产生不必要的麻烦
返回函数的函数
JavaScript 的函数通常是需要返回值的,如果没有明确地指定返回值,那么JavaScript就会默认地返回undefined。如前所述,JavaScript中的函数是也可以当作一种数据来看,那么函数的返回值也就可以是一个函数。如下所示:
function myFunction(){
alert("my value");
return returnFunction(){
alert("return value");
};
}
//弹出警告框"my value"
var test=myFunction();
//弹出警告框"return value"
test();
上述例子中,我们定义的函数myFunction首先弹出了一个警告框"my value",之后返回了一个匿名函数,此匿名函数的功能是弹出一个警告框"return value"。之后我们定义一个变量test,让这个变量的值为myFunction执行后的返回匿名函数的引用。之后我们来执行test(),就可以得到警告框"return value"。当然我们如果想立即使用返回的的函数,可以使用 myFunction()()这种形式来运行。这样就会连续弹出两个警告框。
重写自己的函数
由上面的可以知道,函数的返回值可以是函数。因此,我们就可以想到,我们可以用新返回的函数来重写已有的函数。我们继续来改写上面的例子进行重写,
var myFunction=myFunction();
那么,在我们之后再使用myFunction这个函数的时候,这个函数的功能已经变化了,它之后只会弹出一个内容为"return value"的警告框。
这种方式和前面的自调用匿名函数的功能很像,当我们的函数只需要执行一次或者函数是用来实现初始化的功能,那么为了避免这个函数被多次调用,在我们初始调用这个函数之后我们将其重写一下就能实现这个功能。
我们在上面的代码中是在外部来重写一个函数的,其实也可以在内部来重写,如下:
function myFunction(){
alert("myfunciton");
myFunction=function(){
alert("return value")
}
}
之后在我们第一次使用myFunction()这个函数,就会弹出一个警告框myFunciton,同时,我们重写了myFunction,之后再来使用myFunction这个函数时就会只得到"returnvalue"这个警告框。
当然,结合前面的自调用匿名函数和内部函数的形式,我们也可以以如下方式来实现:
var myFunction=function(){
function setup(){
alert("init");
}
function actualwork(){
alert("work");
}
setup();
return actualwork;
}
上面的这种机制对于我们在浏览器环境中运行应用时相当有用。估计浏览器适配对于大多数JavaScript程序员来说都是一个噩梦,因为对于某些功能,不同的浏览器所提供的JavaScript接口不一样。这样,我们可以实现一个来检测浏览器环境的函数,同时这个函数在执行之后重写自己,当然,重写的内容就是在当前浏览器环境下那些代码不兼容事件的支持函数。
分享到:
相关推荐
在JavaScript中,函数不仅是一种可以执行的代码块,还被视为一种特殊的对象——函数对象。这意味着函数具有对象的所有特性,比如拥有属性和方法,并且可以被赋值给变量、存储在数据结构中或作为参数传递给其他函数。...
在这个“几个经典JavaScript控件下载”的压缩包中,包含了几个实用的JavaScript组件,这些组件可以帮助开发者创建更加交互性和用户友好的网页。 1. **表格格式的树示例**: 树形结构在数据展示中非常常见,例如...
文档中提到的合法验证、数据验证、email验证、url验证、长度验证和数字验证,是进行表单验证时常见的几种验证类型。每种验证类型关注点不同,但其目的都是为了确保用户输入的数据符合特定格式或范围要求。在...
JavaScript函数是编程语言中的核心概念,它是一段可重复使用的代码块,专门设计用来执行特定任务。函数在JavaScript中扮演着重要角色,因为它们能够帮助我们组织代码、提高代码复用性和可维护性。 创建自定义函数是...
JavaScript的所有标识符、常量、变量和参数都属于这几种基本类型。通过typeof运算符可以获取变量的类型信息,帮助我们理解和验证变量的类型。例如,typeof操作符可以用于检测变量是否为特定类型,如typeof("string")...
主要包括以下几种: - **Undefined**: 表示变量已声明但未赋值的状态。 - **Null**: 特殊的空值,通常用于表示空的对象引用。 - **Boolean**: 布尔型数据,值只能为`true`或`false`。 - **Number**: 数字类型,可以...
本文将深入探讨一种特殊的函数形式——有名函数表达式(Named Function Expression, NFE),并通过几个具体的例子来展示它的特性和潜在问题。 #### 二、有名函数表达式概述 有名函数表达式是一种带有标识符的函数...
简单数据类型包括以下几种: - **undefined**:表示一个未定义的值。它可以被赋给任何变量,但是不能销毁变量。`typeof undefined` 返回 `"undefined"`。 - **null**:表示空值或没有任何值的对象引用。尽管 `...
封装是面向对象编程的核心之一,JavaScript通过以下几种方式实现了封装: - **使用闭包**:通过闭包可以隐藏变量,使其只在函数内部可访问,外部无法直接修改。 - **私有变量和公共方法**:通过在构造函数内部定义...
JavaScript支持几种基本的数据类型,包括数字(number)、字符串(string)、对象(object)、布尔值(boolean),同时还提供了null和undefined等特殊值。 - **数字**:用于表示数值,可以是整数或浮点数。 - **...
1. 创建函数的语法:在JavaScript中,创建函数有几种不同的语法方式。最传统的方式是使用function关键字声明一个函数,如function add(a, b) { return a + b; }。这种方式也被称为函数声明,其特点是函数声明之前...
JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责实现客户端的交互效果,增强用户界面。在这个名为"JavaScript经典案例共享"的压缩包中,我们可以期待找到一系列用于学习和参考的JavaScript实例...
ES6标准引入了箭头函数,这是一种新的编写函数表达式的方式,它使用一个箭头(=>)来定义。箭头函数提供了更简洁的函数写法,并且和传统的函数表达式或函数声明相比,它有一些特殊的特性。 首先,箭头函数的基本...
在Javascript编程中,高阶函数(Higher-order function)是一类特殊的函数,它们对其他函数进行操作。具体来说,高阶函数可以接受一个或多个函数作为参数,也可以将函数作为其返回值。这类函数概念在很多现代编程...
接下来,我们探讨几种特殊的函数类型: 1. **普通函数**:它们是最常见的函数形式,可以有同名覆盖、使用`arguments`对象访问额外参数,并且默认返回`undefined`。 2. **匿名函数**:没有名称的函数。可以作为变量...
除了自动类型转换之外,JavaScript还提供了几种显式类型转换的方法: - **`toString()`**: 可以将数值、布尔值等转换为字符串。 - **`parseInt()`**: 将字符串、布尔值等转换为整数。 - **`parseFloat()`**: 将字符...
在JavaScript中,有以下几种基本数据类型: 1. `Number`:用于表示数值,包括整数和浮点数。 2. `String`:表示文本,用引号(单引号或双引号)包围。 3. `Boolean`:表示逻辑值,只有`true`和`false`两个值。 4. `...
在JavaScript中,`function`是一种特殊的对象类型,它是代码的主要载体,可以被当作普通变量一样传递和操作。 - **特点**:函数可以接受参数、执行代码,并返回结果。函数还可以作为另一个函数的参数,或者作为对象...
为了确定一个值的类型,JavaScript提供了几种方法,其中typeof运算符是最常用的一种。它返回一个表示值类型的字符串。对于原始类型的值,typeof能够准确地返回其类型名称,如number、string和boolean。对于函数,...
除了上述几种简单类型之外,JavaScript还支持一种复杂的数据类型——**Object**。对象可以包含各种属性和方法,是实现面向对象编程的基础。 ##### 代码表示 在JavaScript中,所有的代码都可以表示为**Function**。...