javascript中函数定义

js中函数一般定义如下:

function functionName(arg0,arg1,arg2,...,argN) {

statements;
}
其中functionName是函数名,arg0,…argsN是参数,没有具体类型,可以接受任何类型的参数,例如Boolean,Number,String,Object等。function可以有返回值(返回值可以返回任何类型),也可以没有返回值

来看一个function示例:

function printHello(message) {
alert(message);
}

printHello("helloworld");
将会弹出 helloworld

带返回值的函数

function sum(num1,num2) {
return num1 + num2;
}

alert(sum(2,6));
输出8
这样来看,其实和java中也差别不大,但是关键的是在js中也允许这样的代码存在

alert(sum(2,6));
var res = sum(1);
alert(sum(1,2,3));
var res2 = sum;
alert(sum());
这样一来,和java中相差就很大了。可以看到我们 定义函数是两个参数,但是调用却可以是0个,1个,甚至3个参数。并且函数名还可以赋值给其他变量。这是怎么回事呢?下面讲解。

3 javascript中function注意事项
1 javascript中function的本质

javascript中函数本质上是一个对象,每个函数都是Function的实例,都与其他对象一样有属性和方法。由于函数是对象,因此函数名实际上是指向函数的一个指针,函数名不会与具体的某个函数绑定。

理解以上概念对我们理解javascript中函数非常有用,这些解释了以下代码为什么会执行结果相同

var res2 = sum;
res2(1,2);
sum(1,2)
以上代码结果均是3

javascript中函数与java的异同

个人觉得javascript中函数与java中的主要区别如下:

js中函数是一个对象,函数名是一个指针。java中函数是对象的一个方法,依附于对象,不能独立存在。
java中就不说了,很好理解。js中刚刚已经介绍过了,为了理解js中函数是一个对象,我们可以这样定义sum函数:

var sum = new Function("num1","num2","return num1 + num2");

var sum1 = function (num1,num2) {
return num1 + num2;
};

alert(sum(1,3));
alert(sum1(1,3)) ;
以上两个结果均输出4,可以看到,js中函数确实是一个对象。函数名仅仅是一个指向该函数的指针。

js中函数没有重载,参数没有类型校验,调用可传递0到N个参数
js中函数是一个对象,函数名是一个指针,因此对象没法重载,定义多个相同名字的函数等于将该对象指向多个函数,最终肯定会以最后的定义为准。

function print() {
return "print1";
}

function print(message) {
return "print2";
}

alert(print());
alert(print("ppp"));
结果都是输出print2,可见最终print2函数都是返回print2。
另外,js中可以把没有返回值的函数赋值给某个结果变量,如下:

function noReturn() {
var i = 0;
}

var res = noReturn();
//输出 undefined
alert(res);
输出结果是undefined,如果一个函数没有返回值,被赋值时,默认返回undefined

js中函数内部有两个特殊对象:arguments,this
我们知道js中函数可以传递0到N个参数,那这是怎么回事呢?原因是js总函数的参数是用一个数组来表示的,这个数组就是arguments数组,不论传递的多少个参数,函数始终接受到的参数都是这个数组。可以用数组的形式来访问函数参数。如下:

var sum1 = function (num1,num2) {

//arguments length:2 1 3
console.log("arguments length:" + arguments.length + " " + arguments[0] + " " + arguments[1]);
return num1 + num2;
};

alert(sum1(1,3));
当调用时,我们可以看到控制台输出如下结果:
arguments length:2 1 3

this对象

this的行为与java中类似,它引用的是函数执行的环境对象–也可以说是this值(当在网页全局作用域中调用函数时,this对象引用的是window对象)。请参考下面例子。

window.color = "red";

//创建一个对象o 指明具有color属性
var o = {color:"blue"};

function sayColor() {
console.log(this.color);
}

//red
sayColor();

o.saycolor = sayColor;
//blue
o.saycolor();
可以看到,调用sayColor()是,当前this对象是window对象,当把sayColor赋值给o时,后面this对象指代的就是o对象了。

web Function函数的更多相关文章

  1. JavaScript function函数种类(转)

    转自:http://www.cnblogs.com/polk6/p/3284839.html JavaScript function函数种类 本篇主要介绍普通函数.匿名函数.闭包函数 目录 1. 普通 ...

  2. JavaScript function函数种类介绍

    JavaScript function函数种类介绍 本篇主要介绍普通函数.匿名函数.闭包函数 1.普通函数介绍 1.1 示例 ? 1 2 3 function ShowName(name) {     ...

  3. Serverless Web Function 实践教程(一):快速部署 Node.js Web 服务

    作为目前广受欢迎的 Web 服务开发语言,Node.js 提供了众多支持 HTTP 场景的相关功能,可以说是为 Web 构建而生.因此,基于 Node.js,也诞生了多种 Web 服务框架,它们对 N ...

  4. 关于Function()函数对象的那些小九九

    概念:首先,函数是一种特殊类型的数据,函数也是数据类型的一种,实际上函数也是一种对象,函数对象的内建构造器是Function(); 函数的几种创建方式: 函数声明法: function sum(a,b ...

  5. 【JS学习笔记】关于function函数

    函数的基本格式 function 函数名() { 代码: } 函数的定义和调用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...

  6. 2019-2-14SQLserver中function函数和存储过程、触发器、CURSOR

    Sqlserver 自定义函数 Function使用介绍 前言:         在SQL server中不仅可以可以使用系统自带的函数(时间函数.聚合函数.字符串函数等等),还可以根据需要自定义函数 ...

  7. 创建一个Scalar-valued Function函数来实现LastIndexOf

    昨天有帮助网友解决的个字符串截取的问题,<截取字符串中最后一个中文词语(MS SQL)>http://www.cnblogs.com/insus/p/7883606.html 虽然实现了, ...

  8. Warning -27077: The "vuser_init" section contains web function(s) when the "Simulate a new user on each iteration" Run-Time Setting is ON.

    通过LR来录制登录过程并生成脚本,设置了自动关联,并回放录制脚本,观察回放日志发现没有报error信息,说明脚本没有问题,将脚本放入Controller中设置100个用户设置运行,发现运行一段时间开始 ...

  9. javascript:function 函数声明和函数表达式 详解

    函数声明(缩写为FD)是这样一种函数: 有一个特定的名称 在源码中的位置:要么处于程序级(Program level),要么处于其它函数的主体(FunctionBody)中 在进入上下文阶段创建 影响 ...

随机推荐

  1. Windows下PyMC安装

    先安装Anaconda2 然后conda install -c https://conda.binstar.org/pymc pymc

  2. JavaScript 实时 全角转半角

    //JavaScript全角字符转半角(参数str为input框输入的内容)var $fullChar2halfChar = function(str) { var result = ''; for ...

  3. ImitateUCM项目启动Tomcat的过程

    启动各种报错:什么source not found ....然而解决后发现都不是问题关键 下面我讲下我的理解(也许这也不是关键,但是通过该这些,我的问题解决了) (1)重新部署Tomcat时,要同步更 ...

  4. div上下切换(新增、删除、上下div切换)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  5. Python实现,从txt取出号码,在数据库里查询此号码是否存在

    贴代码: import osimport os.pathimport jsonimport loggerimport timegar = []file = u"E:/ybl_TestDepa ...

  6. 使用MockMvc测试controller

    之前我们测试controller的时候仅仅是作为一个pojo来进行简单的测试,spring3.2后我们可以按照控制器的方式来测试Spring MVC的controller了,这样的话在测试控制器的时候 ...

  7. openmv扫码通信

    import sensor, image, time import json from pyb import UART sensor.reset() # 初始化相机传感器 sensor.set_pix ...

  8. 关于手机ios和安卓和pc的点击事件的兼容

    var u = navigator.userAgent, app = navigator.appVersion; var clickEvent; var isAndroid = u.indexOf(' ...

  9. FreeCAD_DWG文件格式支持

    FreeCAD 是一款开源的三维模型制作软件,体积小.功能强大,可结合软件包划分网格进行有限元分析,上手速度极快.但也存在问题,即软件自身不支持DWG文件格式.本文介绍 FreeCAD 支持 DWG格 ...

  10. java 基础代码

    /** * Created by y0n on 2017/4/17. * 1.输出控制台传递的默认参数 */public class JavaDay001_1 { public static void ...